spring學習9-bean的初始化過程


spring學習9-bean的初始化過程

三、spring bean的初始化過程

1.得到BeanDefinition

2.實例化前

org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation

3.實例化

4.實例化后

org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation

實例化后這個方法如果返回了false,就不會走后續的spring邏輯

5.屬性填充

這個階段進行自動裝配,屬性賦值

6.初始化前

org.springframework.beans.factory.config.BeanPostProcessor#postProcessBeforeInitialization

這個方法如果返回了null,表示跳過其余的BeanPostProcessor處理邏輯,一搬情況這里應該返回當前的bean對象

7.初始化

spring提供了一個接口InitializingBean,實現這個接口中的afterPropertiesSet()方法來實現初始化邏輯

public interface InitializingBean {
    void afterPropertiesSet() throws Exception;
}

@PostConstruct注解也可以實現初始化,這個注解的處理是在初始化前進行處理的。

屬性注入完成后才會執行初始化

8.初始化后

重寫這個方法

org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization

通過bean的后置處理器BeanPostProcessor 及其子接口對這個過程進行干預

9.自定義后置處理器舉例


@Component
public class MyBeanPostProcessor implements InstantiationAwareBeanPostProcessor {

    @Override
    public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
        if (beanClass.getName().equals("com.lyy.service.UserService")) {
            System.out.println("UserService--實例化前方法");
        }
        return null;
    }

    @Override
    public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
        if (bean.getClass().getName().equals("com.lyy.service.UserService")) {
            System.out.println("UserService--實例化后方法");
            //return false;//return false表示跳過后續的spring邏輯
        }
        return true;
    }

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if (bean.getClass().getName().equals("com.lyy.service.UserService")) {
            System.out.println("UserService--初始化前方法");
            //return null;//return null表示跳過后續的處理器處理邏輯
        }
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if (beanName.equalsIgnoreCase("UserService")) {
            System.out.println("UserService--初始化后方法");
        }
        return bean;
    }
}

執行順序

UserService--實例化前方法
UserService--無參構造方法
UserService--實例化后方法
UserService--set方法注入
UserService--初始化前方法
UserService--PostConstruct注解初始化
UserService--初始化方法
UserService--初始化后方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM