事件

  1. import org.springframework.context.ApplicationContext;
  2. import org.springframework.context.ApplicationEvent;
  3. import org.springframework.stereotype.Component;
  4. @Component
  5. public class Event extends ApplicationEvent {
  6. /**
  7. * 构造器
  8. * @param source
  9. */
  10. public Event(ApplicationContext source) {
  11. super(source);
  12. }
  13. /**
  14. * 模拟业务执行逻辑
  15. */
  16. public void echo(){
  17. System.out.println("模拟业务执行逻辑");
  18. }
  19. }

事件监听

  1. import com.test.demo.textdemo.gcz.event.Event;
  2. import org.springframework.context.ApplicationListener;
  3. import org.springframework.stereotype.Component;
  4. @Component
  5. public class EventListener implements ApplicationListener<Event> {
  6. @Override
  7. public void onApplicationEvent(Event event) {
  8. event.echo();
  9. }
  10. }

  1. import com.test.demo.textdemo.gcz.event.Event;
  2. import org.springframework.context.event.EventListener;
  3. import org.springframework.stereotype.Component;
  4. @Component
  5. public class EventListenerAnon {
  6. @EventListener
  7. public void onApplicationEvent(Event event) {
  8. event.echo();
  9. }
  10. }

事件发布

  1. import com.test.demo.textdemo.gcz.event.Event;
  2. import org.springframework.beans.BeansException;
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.ApplicationContextAware;
  5. import org.springframework.stereotype.Component;
  6. @Component
  7. public class PublisherAware implements ApplicationContextAware {
  8. private ApplicationContext applicationContext;
  9. @Override
  10. public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  11. this.applicationContext = applicationContext;
  12. }
  13. public void publisherEvent(Event event) {
  14. System.out.println("---开始发布 Event 事件---");
  15. applicationContext.publishEvent(event);
  16. }
  17. }

单元测试

  1. import com.test.demo.textdemo.TextDemoApplication;
  2. import com.test.demo.textdemo.gcz.event.Event;
  3. import com.test.demo.textdemo.gcz.publisher.PublisherAware;
  4. import org.junit.Test;
  5. import org.junit.runner.RunWith;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import org.springframework.test.context.junit4.SpringRunner;
  9. @SpringBootTest(classes = TextDemoApplication.class)
  10. @RunWith(SpringRunner.class)
  11. public class TestDemo {
  12. @Autowired
  13. private PublisherAware publisherAware;
  14. @Autowired
  15. private Event event;
  16. @Test
  17. public void test() {
  18. publisherAware.publisherEvent(event);
  19. }
  20. }
  21. //runtime
  22. ---开始发布 Event 事件---
  23. 模拟业务执行逻辑
  24. 模拟业务执行逻辑