我有一个类似于以下内容的 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
注册表值怎么办?
我在真实代码中看到的执行顺序是:
- 自动连线字段
- @PostConstruct 注释方法
- @Bean 注解的方法
我的目标是让 2 和 3 以相反的顺序执行。我如何知道这些注释在 Java Config 文件中的混合顺序以及哪些选项可用于控制该顺序?
已编辑! 再想一想,虽然我对订单感兴趣,但这可能并不重要。我稍微修改了上面的代码,以反映我想从@PostConstruct 代码调用@Bean 构造函数的事实。
这似乎适用于我所做的非常有限的测试。有谁知道在调用 @PostConstruct 时是否保证所有必要的 Spring 初始化都完成,这样调用 @Bean 注释的方法将始终有效?我确实进入了调用并看到拦截器被调用,但我不知道我将得到的代理将永远是“正确的”代理,所有顾问、建议等都正确附加。