@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