山一程--软件开发--Spring core--POJO 事件通信
目的:Spring IoC 容器内 POJO 通过接口(而非实现)基于事件的通信.发送者与接收者无需感应.
只有当一个发送者组件与一个接收者组件通信时才行,一个发送者与多个接收者通信时,发送者需要逐一调用接收者.
1.定义一个自定义 ApplicationEvent, 可使用 POJO
2.发布事件,定义一个Bean, 自动装配 ApplicationEventPublisher, 使用其的publishEvent( object) 来发布事件
3.监听事件,定义在ApplicationContext 的 Component, 使用 @EventListener注解 ApplicationListener 接口的 onApplicationEvent(obj) 方法
来处理事件.

public class CheckoutEvent { private final String shoppingCart; private final Date time; public CheckoutEvent( String shoppingCart, Date time) { this.shoppingCart = shoppingCart; this.time = time; } public String getShoppingCart() { return shoppingCart; } public Date getTime() { return time; } }
@Component @EnableAutoConfiguration public class Cashier { @Autowired private ApplicationEventPublisher applicationEventPublisher; public void checkout(String shopCart) throws IOException{ CheckoutEvent checkoutEvent = new CheckoutEvent(shopCart, new Date()); applicationEventPublisher.publishEvent(checkoutEvent); } }
@Component public class CheckoutListener { private static final Logger logger = LoggerFactory.getLogger(CheckoutListener.class); @EventListener public void onApplicationEvent(CheckoutEvent event) { logger.info("Checkout event ["+ event.getShoppingCart()+"];time: "+ event.getTime()); } }
@SpringBootApplication public class SpringCoreApplication { public static void main(String[] args) { SpringApplication.run(SpringCoreApplication.class, args); } @Component class app implements ApplicationRunner{ @Autowired Cashier cashier; @Override public void run(ApplicationArguments args) throws Exception { cashier.checkout("shop cart"); } } }

浙公网安备 33010602011771号