簡體   English   中英

如何以編程方式注冊AbstractMongoEventListener?

[英]How do i register AbstractMongoEventListener programmatically?

在我的Spring Boot應用程序中,我有一個配置,可以從Mongo數據庫中讀取條目。

完成此操作后,將創建我的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());
        }
    }
}

我感到驚訝的是,監聽器完全實例化了。 尤其是由於在完成對客戶存儲庫的調用后已很好地實例化了它。

有辦法防止這種情況嗎? 我正在考慮以編程方式在每個表/范圍內注冊它,而沒有注釋魔術。

為防止自動實例化,不得將偵聽器注釋為@Component 該配置需要保留可自動裝配的ApplicationContext。

因此,我的配置類如下所示:

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

請注意,這適用於任何ApplicationListener ,而不僅限於AbstractMongoEventListener

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM