@PostConstruct、@Autowired以及構造函數的執行順序


結論先行:構造函數 -> PostConstruct -> @Autowired 依次執行

由於項目需要啟動時加載一個配置信息,所以想到了用@PostConstruct,如下所示:

@Configuration
public class BUserCenterConfig {

    @Value("${b.user.url}")
    public String userCenterUrl;

    @Value("${b.user.appId}")
    public String userCenterAppId;

    @PostConstruct
    public void setDefaultConfig() {
        UserCenterConfig.SetInterfaceUrl(userCenterUrl);
        UserCenterConfig.SetDefaultAppId(userCenterAppId);
    }
}

BeanTest.java

@Service
public class BeanTest {

    @Autowired
    private BeanTest2 beanTest2;

    public BeanTest() {
        System.out.println("this is BeanTest construct. ");
    }

    @PostConstruct
    private void init() {
        System.out.println("this is BeanTest init function. ");
        beanTest2.test2();
    }
}

BeanTest2.java

@Service
public class BeanTest2 {

    @PostConstruct
    private void init() {
        System.out.println("this is BeanTest2 init function. ");
    }

    public BeanTest2() {
        System.out.println("this is BeanTest2 construct. ");
    }

    void test2() {
        System.out.println("this is BeanTest2 test2 function. ");
    }
}

啟動項目,輸出結果如下:

this is BeanTest construct. 
this is BeanTest2 construct. 
this is BeanTest2 init function. 
this is BeanTest init function. 
this is BeanTest2 test2 function. 

 


免責聲明!

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



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