我有一个类似于:
的Java Config类@Configuration
public class MyConfig {
@Autowired(required = true)
private MyRegistry registry;
public CustomAttributeConfig() {
. . .
}
@Bean
public IBeanApiType someBeanApi() {
return new SomeBeanApi();
}
@PostConstruct
public void postConstructionCodeHere() {
registry.register(someBeanApi());
}
. . .
@Autowired
,@Bean
和@PostConstruct
的执行顺序是否以任何方式得到保证?
如果@Bean
使用了@Autowired
注册表值,该怎么办?
我在实际代码中看到的执行顺序是:
我的目标是让2和3以相反的顺序执行。如何知道Java Config文件中这些注释的混合顺序以及可用于控制该顺序的选项?
EDITTED! 考虑到这一点,虽然我对订单感兴趣,但这可能并不重要。我稍微修改了上面的代码,以反映我想从@PostConstruct代码调用@Bean构造函数的事实。
对于我所做的非常有限的测试,这似乎工作得很好。有没有人知道在调用@PostConstruct时是否保证完成所有必要的Spring初始化,以便调用@Bean注释方法将始终有效?我确实进入了调用并看到了被调用的拦截器,但是我不知道我将返回的代理将始终是“正确”的代理,并且所有顾问,建议等都已正确附加。
答案 0 :(得分:0)
是的,在使用bean创建方法的当前构造中,Spring将确保此方法返回创建的bean。当然可以确保bean正确初始化
答案 1 :(得分:0)
您可以在SomeBeanApi中使用以下代码而不是MyConfig
@Autowired(required = true)
private MyRegistry registry;
@PostConstruct
public void postConstructionCodeHere() {
registry.register(this);
}