2016-05-18 10 views
0

私のSpringブートアプリケーションでは、Mongoデータベースからエントリを読み込む設定があります。AbstractMongoEventListenerをプログラムで登録するにはどうすればよいですか?

これが実行された後、私のサブクラスAbstractMongoEventListenerは、別のテーブルと異なるスコープで動作していても作成されます(私自身のカスタム@CustomerScope)。ここで

はリスナーです:

@CustomerScoped 
@Component 
public class ProjectsRepositoryListener extends AbstractMongoEventListener<Project> { 

    @Override 
    public void onAfterSave(Project source, DBObject dbo) { 
     System.out.println("saved"); 
    } 
} 

そして、ここでの設定:

@Configuration 
public class MyConfig { 

    @Autowired 
    private CustomersRepository customers; 

    @PostConstruct 
    public void initializeCustomers() { 
     for (Customer customer : customers.findAll()) { 
      System.out.println(customer.getName()); 
     } 
    } 
} 

私はそれは驚くべきリスナーが全くインスタンス化されることがわかります。特に、顧客リポジトリへの呼び出しが完了した後で、それがうまくインスタンス化されるためです。

これを防ぐ方法はありますか?私は、注釈魔法なしで、テーブル/スコープごとにプログラムで登録することを考えていました。

答えて

0

自動インスタンス化を防ぐには、リスナーに@Componentという注釈を付けることはできません。この設定では、autowired可能なApplicationContextを取得する必要があります。

このように、私のコンフィギュレーションクラスは、次のようになります。これは任意のApplicationListenerだけでなく、AbstractMongoEventListenerのために働くことを

@Autowired 
private AbstractApplicationContext context; 

private void registerListeners() { 
    ProjectsRepositoryListener firstListener = beanFactory.createBean(ProjectsRepositoryListener.class); 
    context.addApplicationListener(firstListener); 

    MySecondListener secondListener = beanFactory.createBean(MySecondListener.class); 
    context.addApplicationListener(secondListener); 
} 

注意。

関連する問題