先上代码:
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
该方法为观察者模式,通过事件发布,监听者监听到该事件后进而触发各自的事件,降低了代码之间的耦合度,
网友评论