Spring
IOC
IOC介绍和概念引出
-
IOC控制反转是Spring框架的核心内容,控制反转的意思是由Spring框架来控制对象的生命周期和对象间的关系。
- 在原来的场景中,被注入对象 直接依赖 被依赖对象,现在被注入对象去找IOC容器,让容器给它要依赖的被依赖对象。
-
被注入对象有两种常用方式去,告诉IOC容器自己需要哪些被依赖对象,即有两种注入方式,构造方法注入和setter方法注入。
-
接口注入:
-
构造方法注入:被注入对象在其构造方法中将被依赖对象作为参数列表声明
-
setter方法注入:被注入对象为其声明的被依赖对象变量添加setter方法,就可以将注入被依赖对象。
-
-
-
由前面说的可知,Spring实现IOC功能的基础是IOC容器,IOC容器有BeanFactory和ApplicationContext。
- IOC容器的职责:加载配置信息用来创建Bean对象、管理Bean对象的生命周期、管理Bean对象间的依赖关系。
- 这一点也可以叫IOC容器提供的IOC服务有哪些。IOC容器不是只能提供IOC服务,也能提供其他服务。
BeanFactory和ApplicationContext的区别
-
Application继承了BeanFactory,在BeanFactory的基础上提供了其他高级特性,比如事件发布等。所以介绍BeanFactory差不多就是在介绍ApplicationContext了。
-
初始化策略不同:BeanFactory采用延迟初始化策略,只有要访问容器中某个对象时,容器才会初始化这个对象,然后进行依赖注入操作。容器启动初期速度快,所需资源不多;ApplicationContext在启动时就完成所有初始化,它本身要的资源就多一些。
-
依赖关系管理方式
副标题:如何管理对象间依赖关系(即BeanFactory的对象注册与依赖绑定方式)
-
外部配置文件
-
-
properties(yml?)配置文件的加载
-
XML配置文件的加载
-
里面包含多个,还有些其他的的每部标签
-
定义单个对象
- id属性:身份证号。一个可以指代它的字符串?
- name属性:可以指代对象的别名,格式更灵活
- class属性:对象的类型,是哪一个类
-
Spring中出现同名的Bean怎么办?
-
构造方法注入的XML、setter方法注入的XML
- 里面有些东西,, , 内部, , ,
-
bean的scope(范围)
- singleton,这里就是一个Spring中的单例模式了,一直存活
- prototype,多实例,自生自灭(GC?)
- request、session、global session只用于web
-
FactoryBean工厂方法
- 这又是一个设计模式了。注意不是BeanFactory
-
-
-
注解
-
有哪些注释使声明Bean的:Component、Controller、Service、Repository
-
@Autowired是主角,告知容器要为当前对象注入哪些依赖对象。
- @Resource和@Autowired的区别
-
配合@Component和再xml中开启component-scanning就可以注入了??
-
-
基于Java Api的配置??
附加一:Bean的生命周期
-
Bean的生命周期可以概括为:4个阶段 + 2个切入点
-
第一阶段:Bean的实例化与BeanWrapper
-
第一个切入点:各色的Aware接口
-
第二个切入点:BeanPostProcessor
- BeanPostProcessor有两个方法
-
第二阶段:InitializingBean和init-method
- 一个是spring写死的方法,一个是可以自定义的方法??
-
第三阶段:使用Bean
-
第四阶段:DisposableBean与destroyed-method
-
附加二:Spring(Bean)的循环依赖
单例对象初始化步骤
附加三:单例Bean是否有线程安全问题
多例咋就不问,就没有吗?