我们知道了Spring的优点。那么该怎么使用Spring呢?
一.需要一个容器
上帝需要观察人类的从生到死,所以上帝创造了世界。程序员关心对象的使用,所以程序员需要创建一个容器来创建对象,装配对象,配置它们,管理它们的生命周期(怎么感觉像是模拟人生~),从生存到死亡。
二.Bean工厂和应用上下文
下面我们来讨论下创世的,哦不,是创建容器的类型。一般可以分为两类:
1.Bean工厂
Bean factories由org.springframework.beans.facory.BeanFactory接口定义,是最简单的容器,提供基本的DI支持。但是相对于大多数应用都太低级了。所以一般使用应用上下文。
2.应用上下文
应用上下文由org.springframework.context.ApplicationContext接口定义,基于Bean工厂之上构建(没错,我们使用的是克隆人),并提供面向应用的服务。
三.应用上下文
一般用户最有可能遇到以下3种应用上下文:
ClassPathXmlApplicationContext——从类路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当作类资源。
FileSystemXmlapplicationcontext——读取文件系统下的XML配置文件并加载上下文定义。
XmlWebApplicationContext——读取Web应用下的XML配置文件并装载上下文定义。
使用FileSystemXmlapplicationcontext和使用ClassPathXmlApplicationContext的区别在于前者明确文件地址,后者是在所有的类路径(包括JAR文件下)查找文件。通过现有的应用上下文引用,你可以调用应用上下文的getBean()方法从Spring容器中获取Bean。
四.Bean的生命周期
下面我们来谈谈人道毁灭的周期性。哦,错了,是Bean的生命周期。
与传统的Java中Bean创建-使用-自动回收的过程不同。Spring容器中的Bean生命周期更细腻。每个过程都可以自定义自己的需求:
1.Spring对Bean进行实例化
2.Spring将值和Bean的引用注入进Bean对应的属性中。
3.如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()接口方法。
4.如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()接口方法,将BeanFactory容器实例传入。
5.如果Bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()接口方法,将应用的上下文的引用传入。
6.如果Bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessBeforeInitialization()接口方法。
7.如果Bean实现了InitializingBean接口,Spring将调用它们的afterPropertiesSet()接口方法。类似地,如果Bean使用init-method声明了初始化方法,该方法也会被调用。
8.如果Bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessAfterInitialization()接口方法。
9.此时此刻,Bean已经准备就绪,可以背应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁。
10.如果Bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法。同样,如果Bean使用destroy-method声明了销毁方法,该方法也会被调用。