Spring知识点小结(二)

一、配置非自定义的Bean(数据源DataSource模型)

DBCP数据源:
        导入dbcp的jar包:dbcp+pool+connector
        
        代码实现:
            //创建数据源对象
            BasicDataSource dataSource = new BasicDataSource();
            //设置数据库的基本参数
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql:///test");
            dataSource.setUsername("****");
            dataSource.setPassword("****");
            //从数据源中获得连接资源
            Connection connection = dataSource.getConnection();
            //jdbc操作
            System.out.println(connection);
            
    C3P0数据源:
        导入c3p0的jar包:c3p0+connector
        
        代码实现:    
            //创建数据源对象
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            //设置数据库的基本参数
            dataSource.setDriverClass("com.mysql.jdbc.Driver");
            dataSource.setJdbcUrl("jdbc:mysql:///test");
            dataSource.setUser("****");
            dataSource.setPassword("****");
            //从数据源中获得连接资源
            Connection connection = dataSource.getConnection();
            //jdbc操作
            System.out.println(connection);
            
    在spring中配置数据源对象:
        <!-- 将jdbc.properties文件加载到spring的容器中 需要用到context命名空间  
            classpath:类加载路径 开发环境下就是src
        -->
        <context:property-placeholder location="classpath:jdbc.properties"/>
        
        <!-- 配置c3p0数据源 -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driver}"></property>
            <property name="jdbcUrl" value="${jdbc.url}"></property>
            <property name="user" value="${jdbc.username}"></property>
            <property name="password" value="${jdbc.password}"></property>
        </bean>

二、Spring的注解开发

注解与xml配置文件的优缺点?
        xml优点:解耦合  缺点:配置繁琐
        注解优点:快    缺点:耦合

1、Spring原始注解
        出现的目的主要是对自定义的Bean的xml配置的替代
        
        1.1开发步骤:
            1、导入额外jar:spring-aop.jar
            2、在xml中开启组件扫描
                <!-- 组件扫描:告知spring容器哪些包下的bean需要被扫描 -->
                <context:component-scan base-package="com.cyxz"></context:component-scan>
            3、在实体Bean上使用注解进行开发
                @Component("customerDao")
                public class CustomerDaoImpl implements CustomerDao
                
                @Component("customerService")
                public class CustomerServiceImpl implements CustomerService
                
                @Autowired
                private CustomerDao customerDao;
            4、测试
            
            
        1.2 注解的详解    
            IoC:创建对象
                @Component(该Bean对象的标识/id):在需要被spring进行实例化Bean上,参数字符串可以不写,默认是当前类名的首字母小写
                @Controller:控制器  使用web层的Bean上 例如Action
                @Service:服务  使用service层的Bean 例如CustomerServiceImpl
                @Repository: 仓库   使用dao层的Bean上  例如CustomerDaoImpl
            DI:依赖注入,注解的注入可以省略set方法
                @Autowired:自动按照实体的类型进行注入
                @Qualifier("customerDao") //此处@Qualifier是按照名称匹配  但是在此处@Qualifier结合@Autowired一起使用
                @Resource(name="customerDao") //@[email protected][email protected]
                
                @Value(值)
                
            其他:
                @Scope:配置bean的作用范围,取值singleton(默认)和prototype
                
                @PostConstruct:指定初始化方法 //在构造之后执行
                PreDestroy:指定销毁方法 //在销毁之前执行
                
            注意;重点注解:@Controller、@Service、@Repository、@Autowired、@Scope
            
            注意:开发准则:Bean是自定义那么使用注解配置、Bean是非自定义的那么使用xml配置
    
    2、Spring新注解(次重点)
        Spring的新注解出现的目的完全替代xml配置文件
        
        使用配置类 替代  xml文件
        使用注解   替代  标签
        
        @Configuration //标注该类是一个spring的配置类
        @ComponentScan("com.cyxz") //组件扫描
        @Import({DataSourceConfiguration.class}) //引入其他的配置类
        @PropertySource({"classpath:jdbc.properties"})  //加载jdbc.properties文件
        @Value("${jdbc.driver}") //匹配spring容器中的key
        @Bean(name="dataSource") //将该方法的返回值以指定的名称存储到spring容器中

三、Spring集成Junit

原有的测试类:
        @Test
        //测试从spring中获得Service实例对象
        public void test1() throws Exception{
            ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
            CustomerService customerService = (CustomerService) app.getBean("customerService");
            customerService.save();
        }
        
    spring集成junit:
        开发步骤:
            1、导入额外的jar
                spring-test.jar
                spring-aop.jar
                junit.jar
                
            2、通过注解的形式指定测试类 和 配置文件
                执行测试类:@RunWith(SpringJUnit4ClassRunner.class)
                指定配置文件(类):@ContextConfiguration("classpath:applicationContext.xml")
            3、测试spring容器中的哪个对象就通过注解注入哪个对象
                
            4、编写测试方法
            
        代码实现:    
            @RunWith(SpringJUnit4ClassRunner.class)
            //@ContextConfiguration("classpath:applicationContext.xml") //加载配置文件
            @ContextConfiguration(classes={SpringConfiguration.class}) //加载配置类
            public class SpringJunitTest {
                @Autowired
                private CustomerDao customerDao;
                @Autowired
                private CustomerService customerService;
                
                @Test
                public void test1(){
                    customerDao.save();
                }
                @Test
                public void test2(){
                    customerService.save();
                }
                
            }

原文地址:https://www.cnblogs.com/itworkerlittlewrite/p/9485999.html

时间: 2024-10-27 13:59:21

Spring知识点小结(二)的相关文章

Hibernate知识点小结(二)

一.持久化对象和标识符    1.持久化类        配置完关系后,操作的实体对应的类,成为持久化类 (Customer) 2.持久化类标识符(oid:object id)        3.持久化类主键的生成策略        <id name="cust_id">            <generator class="native"></generator>                </id>    

C++知识点小结 (二)

一.拷贝构造函数 1.是一种特殊的构造函数,就是用一个已有的对象去构造其同类的副本对象,即对象克隆 class 类名 { 类名(类名& that) { 对成员挨个赋值 } } 2.编译器会默认生成一个拷贝构造函数 编译生成的拷贝构造函数默认会逐字节复制类中的每一个成员 如果在类A中有类B成员,会在类A的拷贝构造中自动调用类B的拷贝构造 3.程序员可以自定义拷贝构造来取代默认的拷贝构造 a.拷贝构造只能有一个,不能重载 b.一旦程序员自定义的拷贝构造,编译器就不再生成 c.在自定义的拷贝中能通过编

Spring知识点总结(二)之Spring IOC

1.创建bean类,并在spring中进行配置交由spring来管理1. IOC(DI) - 控制反转(依赖注入)    所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和生命周期的管理,而是在需要时由Spring框架提供,这个由spring框架管理对象创建和生命周期的机制称之为控制反转.而在 创建对象的过程中Spring可以依据配置对对象的属性进行设置,这个过称之为依赖注入,也即DI.    

SpringBoot 系列教程之事务隔离级别知识点小结

SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上,并通过实例演示不同的事务隔离级别下,脏读.不可重复读.幻读的具体场景 I. 基础知识 在进入正文之前,先介绍一下事务隔离级别的一些基础知识点,详细内容,推荐参考博文 mysql 之锁与事务 1. 基本概念 以下基本概念源于个人理解之后,通过简单的 case 进行描述,如有问题,欢迎拍砖 更新丢失

Spring知识点回顾(01)

Spring知识点回顾(01) 一.依赖注入 1.声明Bean的注解 @Component @Service @Repository @Controller 2.注入Bean的注解 @Autowired @Inject @Resource 二.加载Bean 1.xml方式 - applicationcontext.xml : Beans, Bean, Component-Scan 2.注解方式 - @Configuration,@ComponentScan,@Bean 用@Configurati

oracle事务知识点小结

DML语句流程 1 获取事务锁和ITL2 锁定候选行3 生成redo4 生成undo5 生成redo record写入log buffer并更改数据块 事务提交1 分配SCN2 更新事务表,将事务槽状态改为0x093 回收undo块4 创建commit redo record5 将redo从log buffer刷新6 释放表锁和行锁 锁一个事务由1个TX和若干TM组成,而回滚savepoint不会释放TX锁: ITL通过XID指向事务槽,进而指向undo记录,其UBA也指向undo记录:两者区别

javascript 学习小结 (二) by FungLeo

javascript 学习小结 (二) by FungLeo 前言 前面写过一个学习小结javascript 学习小结 JS装逼技巧(一) by FungLeo 那篇博文总结的东西还是比较多的. 但是JS有很多的内容,都是很有用的知识点,不可能一下子记住.因此,我的学习小结的会一直更新. 因为学习进度的不同,可能每篇博文的长短也不一样,有的学的东西多,就长点. 查询某个字符串在某个数组中的索引值 笨方法 我的基础比较差,所以很多东西是记不住的.因此,我在需要这样做的时候,我写了如下代码 var

【SpringBoot MQ 系列】RabbitMq 核心知识点小结

[MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 AMQP 协议实现的企业级消息系统,想要顺畅的玩耍的前提是得先了解它,本文将主要介绍 rabbitmq 的一些基本知识点 特点 基本概念 消息投递消费的几种姿势 事务 集群 I. 基本知识点 它是采用 Erlang 语言实现的 AMQP(Advanced Message Queued Protoco

深入理解Spring AOP之二代理对象生成

深入理解Spring AOP之二代理对象生成 spring代理对象 上一篇博客中讲到了Spring的一些基本概念和初步讲了实现方法,当中提到了动态代理技术,包含JDK动态代理技术和Cglib动态代理 动态代理这部分我有过一篇博客介绍:动态代理,想深入了解的朋友能够看一看,再回想一下,Spring中怎样区分採用JDK动态代理和CGlib动态代理: 假设目标对象的实现类实现了接口.Spring AOP 将会採用 JDK 动态代理来生成 AOP 代理类: 假设目标对象的实现类没有实现接口,Spring