SpringIoc[1.基础知识]

来源:互联网 发布:验证域名所有权 编辑:程序博客网 时间:2024/06/06 07:03
一、前言
SpringIoc容器提供基本的依赖注入服务以及Bean实例缓存、生命周期管理、Bean实例代理、事件发布、资源装载等高级服务

BeanFactory(IoC容器):提供Ioc配置机制,是Spring框架的基础设施,面向Spring本身;

ApplicationContext(应用上下文或Spring容器):提供面向应用的功能,面向Spring框架的开发者;

二、使用

1.BeanFactory(作为心脏)

     FileSystemResource fsr = new FileSystemResource("xxx");
     BeanFactory bf = new XmlBeanFactory(fsr);
     bf.getBean("yyy");

2.ApplicationContext(作为躯壳)

ApplicationContext由BeanFactory派生;
BeanFactory中需要编程实现的功能在ApplicationContext中通过配置得到;
常用:ClassPathXmlApplicationContext(从类路径加载)和FileSystemXmlApplicationContext(从系统文件系统加载)

     ApplicationContext context = new ClassPathXmlApplicationContext("xxx");
     context.getBean("yyy");

Spring3.0新增AnnotationConfigApplicationContext
     ApplicationContext contextNew = new AnnotationConfigApplicationContext();

Web相关的WebApplicationContext
需要依赖Web容器启动
     WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(...);


三、Bean周期

1.容器寻找Bean的定义信息并且将其实例化;

2.执行依赖注入,Spring按照Bean定义信息注入Bean的所有属性;

3.如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法,并传递Bean的ID作为参数;

4.如果Bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身;

5.如果BeanPostProcessor和Bean关联,那么它们的postProcessBeforeInitialzation()方法将被调用;

6.如果Bean实现了InitializingBean接口,afterPropertiesSet()方法会被调用; 
     如果Bean指定了init-method属性,init-method属性指定的方法将被调用;
     如果InitializingBean和init-method属性同时出现,前者先于后者执行;

7.如果有BeanPsotProcessor和Bean关联,那么它们的postProcessAfterInitialization()方法将被调用;
     到这个时候,Bean已经可以被应用系统使用了,并且将被保留在BeanFactory中直到它不再需要;


8.最后当关闭应用时,Bean Factory会调用destroySingletons()方法,这时,会执行:
     如果Bean实现了DisposableBean接口,destory()方法会被调用;
     如果指定了destroy-method属性,destroy-method属性指定的方法将被调用;
     如果DisposableBean和destroy-method属性同时出现,前者先于后者执行;

注:只有singleton行为的bean接受容器管理生命周期,non-singleton行为的bean,Spring容器仅仅是new的替代,容器只负责创建;