我有一个bean,它扫描带有特定注释(特定于域的注释)的类。我想确保所有使用@MyDomainAnnotation
注释的bean在bean扫描注释为@MyDomainAnnotation
的bean之前进行初始化和实例化。
有没有办法定义这样的依赖,因为这是框架的一部分,因此新类可能会“插入”。基本上我事先并不知道班级的名字。
答案 0 :(得分:1)
在扫描bean上实施ApplicationListener<ContextRefreshedEvent>
。
public class MyScanningBean implements ApplicationListener<ContextRefreshedEvent> {
private boolean scanned = false;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
/* Published when the ApplicationContext is initialized or refreshed,
* for example, using the refresh() method on the
* ConfigurableApplicationContext interface. "Initialized" here means
* that all beans are loaded, post-processor beans are detected and
* activated, singletons are pre-instantiated, and the
* ApplicationContext object is ready for use. */
if (!scanned) {
// scan for beans
scanned = true;
}
}
}
答案 1 :(得分:0)
虽然我选择实现ApplicationListener作为@Tichodroma建议我也找到了另一个解决方案,如果你需要对bean的初始化顺序进行更细粒度的控制,有时可能会出现这种情况。因此,实现SmartLifecycle,您可以提供相位值,该值将确定实例化bean的顺序(按升序排列)(即,将首先初始化具有最小相位值的bean)。
但无论如何,我认为上面的答案在我的情况下更优雅和干净。