Bean建立的三个阶段
1. 实例化,能够理解为new一个对象
2. 属性注入,能够理解为调用setter方法完成属性注入
3. 调用实现Aware接口的一些方法:使得自定义Bean可以识别利用Spring容器的资源
BeanNameAware.setBeanName(String),可以在Bean中得到它在IOC容器中的Bean的实例的名字。
BeanFactoryAware.setBeanFactory(BeanFactory),可以在Bean中得到Bean所在的IOC容器,从而直接在Bean中使用IOC容器的服务。
ApplicationContextAware.setApplicationContext(ApplicationContext),可以在Bean中得到Bean所在的应用上下文,从而直接在Bean中使用上下文的服务。
4. BeanPostProcessor(before)
5. 初始化,你能够按照Spring的规则配置一些初始化的方法(例如, @PostConstruct
注解)
6. BeanPostProcessor(after)
注意:Aware放在初始化之前----->初始化可能会依赖Aware接口提供的状态
再注意:BeanPostProcessor可以在Spring完成Bean实例化,配置,初始化之后实现自己的业务逻辑
5.1 Spring提供了三种初始化方式
a. 实现InitializingBean接口
public interface InitializingBean{ void afterPropertiesSet() throws Exception; }
b. @PostConstruct,通常将注解放在方法上
@PostConstrcut public void init(){ System.out.println("init method..."); }
c. init-method(XML中配置的)
public class MyClass{ public void init(){ System.out.println("init method..."); } } @Configuration public class AppConfig{ @Bean(initMethod="init") public MyClass myclass(){ return new MyClass(); } }
这三个方法的执行顺序为:
@PostConstruct
注解标注的方法
实现了 InitializingBean
接口后复写的 afterPropertiesSet
方法
XML中自定义的初始化方法