SpringBean加載的生命週期

#Spring創建Bean的生命週期

使用一個簡單的例子執行看到springBean的加載過程

package com.sc.ynk.spring;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

import javax.annotation.PostConstruct;

/**
 * @author [email protected]
 * @date 2018/7/1 16:49
 */
public class SpringLoad implements InitializingBean, BeanPostProcessor, BeanNameAware, ApplicationContextAware {


    public SpringLoad() {
        System.out.println("1 constrct SpringLoad");
    }

    @PostConstruct
    public void set() {
        System.out.println("3 beanname生成後構建整合上下文的bean");
    }


    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("4 加載上下文的動態參數");
    }

    @Override
    public Object postProcessBeforeInitialization(Object o, String beanName) throws BeansException {
        System.out.println("postProcessBeforeInitialization beanName="+beanName);
        return o;
    }

    @Override
    public Object postProcessAfterInitialization(Object o, String beanName) throws BeansException {
        System.out.println("postProcessAfterInitialization  beanName="+beanName);
        return o;
    }

    @Override
    public void setBeanName(String s) {
        System.out.println("2 生成設置BeanName");
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("3 將加載的所有參數放入上下文環境");
    }


    public void init() {
        System.out.println("5 上下文生成後初始化bean中的參數");
    }
}

運行後的結果和說明已經在結果中,可以看到一個好的設計就連細節都很牛逼。

1 constrct SpringLoad
2 生成設置BeanName
3 將加載的所有參數放入上下文環境
3 beanname生成後構建整合上下文的bean
4 加載上下文的動態參數
5 上下文生成後初始化bean中的參數
//-------這裏省略別的bean的postProcessBeforeInitialization和postProcessAfterInitialization調用。

postProcessBeforeInitialization beanName=com.sc.ynk.spring.TestSpring
postProcessAfterInitialization  beanName=com.sc.ynk.spring.TestSpring
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章