1

我有一个 bean,它扫描使用特定注释(特定于域的注释)注释的类。我想确保所有带有注释@MyDomainAnnotation的bean在扫描带有注释的bean之前被初始化和实例化@MyDomainAnnotation

有没有办法定义这种依赖关系,因为这是框架的一部分,因此可能会“插入”新类。基本上我事先不知道班级的名字。

4

2 回答 2

1

ApplicationListener<ContextRefreshedEvent>在您的扫描 bean 上实现。

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;
    }
  }
}

http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/beans.html#context-functionality-events

于 2013-07-29T12:50:16.343 回答
0

尽管我选择按照@Tichodroma 的建议实现 ApplicationListener,但我还找到了另一种解决方案,如果您需要对 bean 的初始化顺序进行更细粒度的控制,有时可能就是您想要的。因此,实现SmartLifecycle您可以提供阶段值,这些值将确定您的 bean 实例化的顺序(按升序排列)(即,具有最小阶段值的 bean 将首先被初始化)。

但无论如何,我认为上述答案在我的情况下更加优雅和干净。

于 2013-07-29T17:07:51.623 回答