Spring boot Spring事件侦听器
我正在使用spring ApplicationEventPublisher发布事件 发布和发布的方法Spring boot Spring事件侦听器,spring-boot,java-11,Spring Boot,Java 11,我正在使用spring ApplicationEventPublisher发布事件 发布和发布的方法 @Autowired private ApplicationEventPublisher eventPublisher; private void publishContributorUpdate(long contributorId, boolean isOwner){ var upe = new DeactivateContributorEvent(this); up
@Autowired
private ApplicationEventPublisher eventPublisher;
private void publishContributorUpdate(long contributorId, boolean isOwner){
var upe = new DeactivateContributorEvent(this);
upe.setContributorId(contributorId);
upe.setOwner(isOwner);
eventPublisher.publishEvent(upe);
}
事件类别:
public class DeactivateContributorEvent extends ApplicationEvent
听众来了
@Component
public class ContributorDeactivateEventListener {
@Autowired
private ContributorDao contributorDao;
@EventListener
public void onContributorDeactivation(final DeactivateContributorEvent event) {
contributorDao.updateContributor(event.getContributorId(),event.isOwner(),false);
}
}
所以,这件事是我看过但没有读过的。原因可能是什么?我正在使用spring boot 2.1.3我看到的一切看起来都正常。您能告诉我们更多有关如何创建
eventPublisher
的信息吗?我还要确保您的ContributorDeactivateEventListener
类实际上正在被扫描和实例化。您可以向它添加一个构造函数并在该构造函数中放置一个断点,或者添加一个日志调用或“printf”,以知道Spring正在查看它。(顺便说一句,我假设当你说“不读”时,你的意思是永远不会调用onContributorDeactivation
。@steve说得对。onContributorDeactivation方法没有被调用。你明白我的建议吗?我想知道是否正在创建您的ContributorDeactivateEventListener
对象。我的猜测是,它不是,因为如果它是,那么春天应该叫它可能Spring在启动时没有扫描该文件/类。这是我能想到的最好的解释。似乎唯一的其他解释是,eventPublisher
在某种程度上做得不对。但是,既然在调用NPE异常时没有得到它,那么它一定在那里,我想不出如何设置它不调用您的contributor或deactivateEventListener
类。你必须做一些奇怪的设置,让它不工作。这种机制在春天非常简单所以我猜Spring没有扫描您的ContributorDeactivateEventListener
类以查找注释。我想您已经在日志中查找了与此相关的错误。如果你没有,那将是一件很棒的事情,以防日志中有答案。我看到的一切看起来都很好。您能告诉我们更多有关如何创建eventPublisher
的信息吗?我还要确保您的ContributorDeactivateEventListener
类实际上正在被扫描和实例化。您可以向它添加一个构造函数并在该构造函数中放置一个断点,或者添加一个日志调用或“printf”,以知道Spring正在查看它。(顺便说一句,我假设当你说“不读”时,你的意思是永远不会调用onContributorDeactivation
。@steve说得对。onContributorDeactivation方法没有被调用。你明白我的建议吗?我想知道是否正在创建您的ContributorDeactivateEventListener
对象。我的猜测是,它不是,因为如果它是,那么春天应该叫它可能Spring在启动时没有扫描该文件/类。这是我能想到的最好的解释。似乎唯一的其他解释是,eventPublisher
在某种程度上做得不对。但是,既然在调用NPE异常时没有得到它,那么它一定在那里,我想不出如何设置它不调用您的contributor或deactivateEventListener
类。你必须做一些奇怪的设置,让它不工作。这种机制在春天非常简单所以我猜Spring没有扫描您的ContributorDeactivateEventListener
类以查找注释。我想您已经在日志中查找了与此相关的错误。如果你没有,那将是一件很好的事情,以防日志中有答案。