Spring解密——Ioc基础知识
IOC的注入方式
- 构造方法注入
public FXNewsProvider(IFXNewsListener newsListner,IFXNewsPersister newsPersister){
this.newsListner=newsListner;
this.newsPersister=newsPersister;
IOC容器会检查被注入对象的构造方法,取得它所需要的依赖对象列表,进而为其注入相应的对象
- setter方法注入
getter/setter方法,更改相应对象的属性。对象可以在对象构造完成之后再注入
- 接口注入
由于其强制被注入的对象实现不必要的接口,带有侵入性。因此它不太提倡
IOC也为单元测试提供了良好的基础
掌管大局的IOC容器
IOC容器的职责
- 业务对象的构建管理。在IoC场景中,业务对象无需关心所依赖的对象如何构建如何取得。IOC容器将对象的构建逻辑从客户端对象中剥离出来。
- IOC容器通过结合之前构建和管理的所有业务对象,以及各个业务对象间可以识别的依赖关系,将这些对象锁依赖的对象注入绑定,从而保证每个业务对象在使用的时候,可以处于就绪状态
IOC管理依赖对象的方式
- 直接编码方式
IoContainer container=...;
container.register(FXNewsProvider.class,new FXNewsProvider());
FXNewsProvider provider=container.get(FXNewsProvider.class);
- 配置文件方式XML
- 注解方式 @Autowired , @Component, @Bean
IOC容器之BeanFactory
Spring提供两种容器类型: BeanFactory、ApplicationContext
- BeanFactory:默认是采用延迟初始化策略 核心方法: getBean
- Application间接继承了BeanFactory,提供了事件发布、国际化信息支持等接口支持.ApplicationContext所管理的对象,在该类型容器启动之后,默认全部初始化完成
BeanDefinition
每一个Bean,在容器中都会有一个BeanDefinition的实例,该BeanDefinition实例负责保存对象的所有必要信息
其中 RootBeanDefinition / ChildBeanDefinition是BeanDefinition的实现类
未完待续