一、Bean的解析加载
IOC容器启动
IOC容器通过applicationContext.refresh()加载注册Bean到IOC容器,默认的IOC容器为DefaultListableBeanFactory:
常用的加载方式如下。
ClassPathXmlApplicationContext:从ClassPath路径中加载 XML 配置的上下文。
FileSystemXmlApplicationContext:从文件系统中加载XML 配置的上下文。
XmlWebApplicationContext: Web开发中从 XML 中记载 Web 上下文,区别 于上面 两个之处在于, 此上下文是基于 ServletContext的。
AnnotationConfigWebApplicationContext:从注解类中加载 Web 上下文。
ClassPathXmlApplicationContext 加载流程:
Bean 的解析Bean解析完成之后就会注册到IOC容器
二、Bean的生命周期管理
在Spring容器管理了Bean的生命周期,在Bean的生命周期内,我们可以通过配置或实现接口完成Bean在生命周期内的职责比如:@Autowired自动注入,Druid数据库连接池的初始化,连接池的关闭等。
下面主要介绍Spring为Bean初始化、销毁提供的扩展方法
Bean的初始化:
1.实现BeanNameAware接口的 Bean 能够感知到 自己在BeanFactory 中注册的名称。
2.实现BeanFactoryAware的 Bean 能够感知到 自己所属的 BeanFactory
3.直接在 Bean 的构造方法里做初始化工作 。
4.使用@PostConstruct 注解,指明在 Bean 构造器方法执行后执行的方法。
5.Bean 实现 InitializingBean接口,在 afterPropertiesSet 中做初始化工作。
6.在 XML中使用init-method指定Bean 构造完成后调用的方法。
7.实现BeanPostProcessor接口,可以执行Bean初始化的处理逻辑。可用于自定义注解实现
例如:
Spring内置的BeanPostProcessor实现:
CommonAnnotationBeanPostProcessor解析@Resource注解
RequiredAnnotationBeanPostProcessor解析@Required注解
AutowiredAnnotationBeanPostProcessor解析@Autowired注解
ApplicationContextAwareProcessor用于为注入ApplicationContext等容器对象
Bean的销毁
1.使用@PreDestroy注解,指明容器关闭后执行的方法
2.实现Disposable接口,在destory方法做销毁工作
3.在Xml配置中指定destory-method方法
网友评论