如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
@EventListener是Spring Framework中的注解,用于声明事件监听器方法。它用于将一个方法标记为事件监听器,并定义了该方法应该在接收到特定事件时被调用。
当使用@EventListener注解标记一个方法时,Spring会将该方法注册为一个事件监听器,并在事件发布时自动调用它。监听器方法通常被定义在Spring应用程序的各个组件中,例如Bean类、Service类等。
使用@EventListener注解时,方法的参数可以是事件对象,也可以是包含事件对象的包装对象。当事件被发布时,Spring会自动寻找匹配事件类型的监听器方法并调用它们。
@TransactionalEventListener 是一个注解,用于在Spring应用程序中声明事务事件监听器的方法。它是Spring Framework中的一项功能,用于简化基于事件的编程模型。
@TransactionalEventListener 注解可以应用在方法上,指示该方法是一个事务事件监听器。当触发指定类型的事件时,Spring将自动调用带有 TransactionalEventListener 注解的方法,并在事务上下文中执行该方法。
@TransactionalEventListener 注解可以配置以下属性:
@TransactionalEventListener 注解的使用可以方便地将事件处理与事务管理结合起来,确保事件监听器方法在适当的事务上下文中执行,并能够在事件处理过程中进行事务管理操作。
优点:
缺点:
优点:
缺点:
@Async
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT,classes = OneEvent.class)
@Order(0)
public void testOneEventHandler(OneEvent event) {
log.info("=====================OneEvent===================:{}",event.getName());
}
@Async
@EventListener(classes = TwoEvent.class)
@Order(0)
public void twoEventEventHandler(TwoEvent event) {
log.info("=====================TwoEvent===================:{}",event.getName());
}
@Getter
@Setter
@ToString
public class OneEvent extends ApplicationEvent {
private String name;
public OneEvent() {
super("OneEvent async message");
}
//======================================================
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Getter
@Setter
@ToString
public class TwoEvent extends ApplicationEvent {
private String name;
public TwoEvent() {
super("TwoEvent async message");
}
//======================================================
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Controller:
@Autowired
TestService service;
@ApiOperation(value = "测试", notes = "测试")
@CommonLog(methodName = "测试",className = "TestController#event")
@RequestMapping(value = "/v1/event", method = RequestMethod.POST)
public void event(){
TwoEvent event1 = new TwoEvent();
event1.setName("eiuyriuw");
SpringContextUtil.getApplicationContext().publishEvent(event1);
service.test();
}
Service:
public interface TestService {
void test();
}
@Service
@Slf4j
public class TestServiceImpl implements TestService {
@Transactional
@Override
public void test() {
OneEvent event = new OneEvent();
event.setName("uiuoiuo");
SpringContextUtil.getApplicationContext().publishEvent(event);
}
}
调用测试代码
测试成功!!!