[英]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.