ApplicationContext的三种常见的实现类:
- ClassPathXmlApplicationContext: 加载类路径下的配置文件
- FileSystemXmlApplicationContext: 加载磁盘路径下的配置文件
- AnnotationConfigApplicationContext: 用于读取注解创建的容器
核心容器接口引发的问题:
- ApplicationContext:
- 它在构建核心容器时,创建对象采用的策略是立即加载的方式. 也就是说,只要一读取完配置文件就马上创建配置文件中配置巍峨对象.
- 创建产生单例对象
- BeanFactory:
- 在构建容器对象时,采用的策略是延迟加载的方式. 也就是说,什么时候根据id获取对象,什么时候才创建对象.
- 创建产生多例对象
- 创建Bean的三种方式:
- 使用构造器创建
<bean id ="accountService" class="com.tcl.service.impl.AccountServiceImpl"/>
- 使用普通工厂方法创建对象
<bean id ="instanceFactory" class="com.tcl.factory.InstanceFactory"/>
<bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"/>
- 使用工厂方法中的静态方法创建对象(使用静态方法创建对象,并存入spring容器中)
<bean id="accountService" class="com.tcl.factory.StaticFactory" factory-method="getAccountService"/>
- bean的作用范围:
- singleton: 单例, 默认值
- prototype: 多例
- request: 作用于web请求范围
- session: 作用于web会话范围
- global-session: 作用于集群环境的会话范围
- bean的生命周期
单例对象:
- 出生: 随着容器的创建而产生
- 活着: 只要容器存在, 则对象就一直存活
- 死亡: 容器销毁, 则对象也消亡
- 总结: 同容器的生命周期相同
多例对象:
- 出生: 当使用对象时,容器才创建bean实例对象
- 活着: 对象在使用过程中一直存活
- 死亡: 当对象长时间不被使用时, 会被JVM回收
- 依赖注入的三种方式
- 构造器创建
优点: 在获取bean时, 注入数据是实例化的必须操作,否则无法创建对象
弊端: 在创建对象时, 如果用不到这些数据, 也得提供 - set方法注入依赖
优点: 创建对象时没有限制, 可以直接使用默认的构造函数
弊端: - 注解注入依赖
- spring整合junit
- spring-test依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
- 使用junit注解替换main方法
@Runwith - 告知spring运行器, 说明spring和ioc是基于xml还是注解
@ContextConfiguration:
locations: 指定xml配置文件的位置, 并要加上classpath:
classes: 指定注解类的位置
当spring 版本在5.0以上,则junit版本需要在4.12及以上
- 常用注解
- bean:
作用: 把当前方法的返回值作为bean存储在Ioc容器中
属性:
name: 用于指定bean的id. 默认是当前方法的方法名 - import :
作用: 用于导入其他配置类
属性:
value: 用于指定其他配置类的字节码
当我们使用import注解时, 有import注解的类是父配置类, 而导入的类为子配置类 - PropertySource:
作用: 用于指定properties的位置
属性:
value: 指定文件位置
关键字: classapath , 表示在类路径下