前言
偶然看到BeanDefinition类后,我思索spring解析<bean>标签后生成了什么类的对象?它是怎么做到钩子函数的,是回调函数,还是用了动态代理机制?BeanDefinition和@Bean有什么关系吗?
什么是Bean
- Bean的定义。bean 定义包含称为配置元数据的信息,下述容器也需要知道配置元数据:
- 如何创建一个 bean
- bean 的生命周期的详细信息
- bean 的依赖关系
- Spring 配置元数据的三种方法:
- 基于 XML 的配置文件。
- 基于注解的配置
- 基于 Java 的配置
Bean的生命周期
- 实例化
- 设置属性。Setter注入。
- 各种Aware接口调用
- BeanPostProcessor.postProcessBeforeInitialization
- InitializingBean.afterProPertiesSet
- init-method(如果有设置)
- BeanPostProcessor.postProcessAfterInitialization
然后Bean可以正常使用。
容器关闭时
- DisposableBean.destroy
- destroy-method(如果有配置)
Spring循环依赖检查
内部Bean级联 inter-bean-dependencies
- @Configuration内,spring会自动处理Bean级联问题。
- @Component等其它注解内,spring只会把Bean方法当做普通工厂方法对待
查阅springBean内部级联来进一步了解这一点。
单例Bean与原型Bean的相互引用
...
网友评论