Spring学习笔记_02

本文档详细介绍了Spring框架中IOC/DI的注解开发,包括配置管理第三方bean(Druid、C3P0)、加载properties文件、核心容器、注解开发bean的生命周期管理与依赖注入。此外,还探讨了如何使用注解管理第三方bean,以及Spring整合Mybatis和Junit的思路和步骤。内容深入浅出,适合Spring初学者和进阶者学习。
摘要由CSDN通过智能技术生成

目录

1、IOC/DI配置管理第三方bean

1.1、实现Druid管理

1.2、实现C3P0管理

1.3、加载properties文件

1.3.1、实现步骤

1.3.2、注意事项

2、核心容器

2.1容器

3、IOC/DI注解开发

3.1、注解开发定义bean

3.2 纯注解开发模式

3.2.1 思路分析

3.2.2 实现步骤

3.3 注解开发bean作用范围与生命周期管理

3.3.1、要想将注解定义好的bean修改成单例或者非单例

3.4 注解开发依赖注入

3.4.1 注解实现按照类型注入

3.4.2 注解实现按照名称注入

3.4.3 简单数据类型注入

3.4.4 注解读取properties配置文件

4、IOC/DI注解开发管理第三方bean

4.1、注解开发管理第三方bean

4.2、 引入外部配置类

4.2.1 使用包扫描引入

4.2.2 使用@Import引入

知识点1:@Bean

知识点2:@Import

4.3、 注解开发实现为第三方bean注入资源

5、Spring整合

5.1 Spring整合Mybatis思路分析

5.1.1 环境准备

5.2 Spring整合Mybatis

5.3 Spring整合Junit

5.3.1 整合Junit步骤


1、IOC/DI配置管理第三方bean

1.1、实现Druid管理

步骤1:导入Druid的依赖

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid</artifactId>
     <version>1.1.16</version>
 </dependency>

步骤2:配置第三方bean

在applicationContext.xml配置文件中添加DruidDataSource的配置

<?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
             http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans.xsd">
     <!--管理DruidDataSource对象-->
     <bean class="com.alibaba.druid.pool.DruidDataSource">
         <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
         <property name="url" value="jdbc:mysql://localhost:3306/spring_db"/>
         <property name="username" value="root"/>
         <property name="password" value="root"/>
     </bean>
 </beans>

1.2、实现C3P0管理

步骤1:导入C3P0的依赖

pom.xml中添加依赖

<dependency>
     <groupId>c3p0</groupId>
     <artifactId>c3p0</artifactId>
     <version>0.9.1.2</version>
 </dependency>
 <!--初始化时需要加载mysql驱动类-->
 <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>5.1.47</version>
 </dependency>

步骤2:配置第三方bean

在applicationContext.xml配置文件中添加配置

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
     <property name="driverClass" value="com.mysql.jdbc.Driver"/>
     <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_db"/>
     <property name="user" value="root"/>
     <property name="password" value="root"/>
     <property name="maxPoolSize" value="1000"/>
 </bean>

注意:

  • 数据连接池在配置属性的时候,除了可以注入数据库连接四要素外还可以配置很多其他的属性,具体都有哪些属性用到的时候再去查,一般配置基础的四个,其他都有自己的默认值

  • Druid和C3P0在没有导入mysql驱动包的前提下,一个没报错一个报错,说明Druid在初始化的时候没有去加载驱动,而C3P0刚好相反

  • Druid程序运行虽然没有报错,但是当调用DruidDataSource的getConnection()方法获取连接的时候,也会报找不到驱动类的错误

1.3、加载properties文件

在配置druid和C3P0两个数据源的过程中,其中包含了一些问题、

  • 这两个数据源中都使用到了一些固定的常量如数据库四要素,把这些值写在Spring的配置文件中不利于后期维护

  • 需要将这些值提取到一个外部的properties配置文件中

  • Spring框架如何从配置文件中读取属性来配置

1.3.1、实现步骤

步骤1:准备properties配置文件

resources下创建一个jdbc.properties文件,并添加对应的属性键值对

jdbc.driver=com.mysql.jdbc.Driver
 jdbc.url=jdbc:mysql://127.0.0.1:3306/spring_db
 jdbc.username=root
 jdbc.password=root

步骤2:开启context命名空间

在applicationContext.xml中开context命名空间

<?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
             http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context.xsd">
 </beans>

步骤3:加载properties配置文件

在配置文件中使用context命名空间下的标签来加载properties配置文件

 <context:property-placeholder location="jdbc.properties"/>

步骤4:完成属性注入

使用${key}来读取properties配置文件中的内容并完成属性注入

 <?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframewor 
             http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context.xsd">
     
     <context:property-placeholder location="jdbc.properties"/>
     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
         <property name="driverClassName" value="${jdbc.driver}"/>
         <property name="url" value="${jdbc.url}"/>
         <property name="username" value="${jdbc.username}"/>
         <property name="password" value="${jdbc.password}"/>
     </bean>
 </beans>

1.3.2、注意事项

  • 问题一:键值对的key为username引发的问题

    1.在properties中配置键值对的时候,如果key设置为username

    username=root666

    2.在applicationContext.xml注入该属性,结果是自己电脑的用户名

出现问题的原因是<context:property-placeholder/>标签会加载系统的环境变量

解决方案

<?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
             http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context.xsd">
     
     <context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>
 </beans>

system-properties-mode:设置为NEVER,表示不加载系统属性,就可以解决上述问题

  • 问题二:当有多个properties配置文件需要被加载,该如何配置?

<?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
             http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context.xsd">
     <!--方式一 -->
     <context:property-placeholder location="jdbc.properties,jdbc2.properties" system-properties-mode="NEVER"/>
     <!--方式二-->
     <context:property-placeholder location="*.properties" system-properties-mode="NEVER"/>
     <!--方式三 -->
     <context:property-placeholder location="classpath:*.properties" system-properties-mode="NEVER"/>
     <!--方式四-->
     <context:property-placeholder location="classpath*:*.properties" system-properties-mode="NEVER"/>
 </beans>    

说明:

  • 方式一:可以实现,如果配置文件多的话,每个都需要配置

  • 方式二:*.properties代表所有以properties结尾的文件都会被加载,可以解决方式一的问题,但是不标准

  • 方式三:标准的写法,classpath:代表的是从根路径下开始查找,但是只能查询当前项目的根路径

  • 方式四:不仅可以加载当前项目还可以加载当前项目所依赖的所有项目的根路径下的properties配置文件

2、核心容器

  • 如何创建容器?

  • 创建好容器后,如何从容器中获取bean对象?

  • 容器类的层次结构是什么?

  • BeanFactory是什么?

核心容器需要导入的坐标

<dependencies>
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-context</artifactId>
         <version>5.2.10.RELEASE</version>
     </dependency>
 </dependencies>

2.1容器

2.2.1、容器的创建方式

方式一: 相对路径

 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

方式二:绝对路径

 ApplicationContext ctx = new FileSystemXmlApplicationContext("D:\\workspace\\spring\\spring_10_container\\src\\main\\resources\\applicationContext.xml");

这种方式虽能实现,但是当项目的位置发生变化后,代码也需要跟着改,耦合度较高,不推荐使用。

2.2.2、Bean的三种过去方式

方式一

 BookDao bookDao = (BookDao) ctx.getBean("bookDao");

这种方式存在的问题是每次获取的时候都需要进行类型转换

方式二:

 BookDao bookDao = ctx.getBean("bookDao",BookDao.class);

这种方式可以解决类型强转问题,但是参数又多加了一个

方式三:

 
BookDao bookDao = ctx.getBean(BookDao.class);

这种方式就类似我们之前所学习依赖注入中的按类型注入。必须要确保IOC容器中该类型对应的bean对象只能有一个。

2.2.3 BeanFactory的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值