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中自定义的初始化方法

posted on 2021-08-03 22:22  smile学子  阅读(42)  评论(0编辑  收藏  举报