美文网首页
事件推送/监听

事件推送/监听

作者: 那就省略号吧 | 来源:发表于2020-03-31 22:17 被阅读0次

先上代码:

controller层
@RestController
@RequestMapping("/api/test")
public class Test {
    @Autowired
    private TestService testService;
    @PostMapping("/get")
    public void test(@RequestParam("integer") Integer integer){
        System.out.println("进入开始");
        testService.save(integer);
    }
}
service层
public interface TestService {
    void save(Integer integer);
}

@Service
public class TestServiceImpl implements TestService {
    @Autowired
    private ApplicationEventPublisher applicationEventPublisher;

    @Override
    public void save(Integer integer) {
        System.out.println("事件推送");
        try {
            //事件推送,监听事件根据参数类型来触发对应的监听事件
            applicationEventPublisher.publishEvent(integer);
        } catch (Exception e) {
            System.out.println("错误了");
        }
    }
}
事件监听
@Component
public class ListenTest {
    //异步实现
    @Async
    //条件限制,使用的是spEL(Spring Expression Language)表达式
    @EventListener(condition = "#integer==1")
    public void testListen1(Integer integer){
        //通过参数类型触发事件
        System.out.println("执行了1");
    }
    @EventListener(condition = "#integer==2")
    public void testListen2(Integer integer){
        System.out.println("执行了2");
    }
    @Async
    @EventListener()
    public void testListen3(Integer integer){
        System.out.println("执行了1,2");
    }
    @Async
    @EventListener()
    public void testListen4(String integer){
        System.out.println("我执行了吗");
    }
}
执行结果
进入开始
事件推送
执行了1
执行了1,2

该方法为观察者模式,通过事件发布,监听者监听到该事件后进而触发各自的事件,降低了代码之间的耦合度,

相关文章

网友评论

      本文标题:事件推送/监听

      本文链接:https://www.haomeiwen.com/subject/sixnuhtx.html