Spring(三)---容器与生命周期

所谓装配(wiring),就是将组件状态到Spring容器中,并且在这些组件建立联系。

 

(一)BeanFactory vs ApplicationContext

Spring有两种容器:BeanFactory,ApplicationContext.其中ApplicationContext是BeanFactory的子接口。

BeanFactory使用工厂模式,用来创建和分配bean,它面向简单应用,常常用到的XmlBeanFactory是BeanFactory的一个重要实现,它应用于使用xml文件进行配置bean的应用。另外BeanFactory也参与Bean的生命周期,包含调用初始化和消亡相关的方法。

相关的方法举例:

BeanFactory beanFactory = new XmlBeanFactory(new FileInputStream("hello.xml"));

AClass aObject = (AClass)beanFactory.getBean("aId");

这样,aId对应的bean在Spring容器中的生命周期就开始了。

而ApplicationContext和BeanFactory类似,它有3个常用的实现:ClassPathXmlApplicationContext,FileSystemXmlApplicationContext,XmlWebApplicationContext

而ApplicationContext和BeanFactory的区别在于

1.BeanFactory中,当创建对应的BeanFactory时,bean并不会被构造,它们只会在需要时才会被构造出来;而ApplicationContext会在开始时对所有的单例(Singleton)bean进行预装载。

2.ApplicationContext还提供了其他的服务,例如,提供解决文本消息的方法,包含对这些方法的国际化;提供装载文件资源的generic方法;可以给bean发布事件,它具有更强大的功能,因此,在实际应用中使用更多。

(二)bean的生命周期

bean在可用之前,经过的步骤:

1.容器找到bean并进行实例化

2.利用依赖注入,Spring会设置bean的属性

3.如果Bean实现了BeanNameAware接口,那么容器会调用对应setBeanName()方法

4.如果bean实现了BeanFactoryAware(/ApplicationContextAware)接口,那么会调用对应的setBeanFactory()(setApplicationContext())方法

5.如果这个bean于任何BeanPostProcessor相关,那么调用对应的postProcessorBeforeInitialization()方法

6.如果init-method被指定,那么对应方法会被调用

7.如果bean与任何BeanPostProcessor相关,则调用对应的postProcessorAfterInitialization方法会被调用

经过这7个步骤后,bean就可以用了

当容器关闭时

1.如果bean实现了DisposableBean,那么对应的destroy()方法将被调用

2.如果destroy-method被指定,那么对应方法将被调用

经过这两步,bean就被销毁了

 

你可能感兴趣的:(Spring(三)---容器与生命周期)