事件

ActFramework提供简单易用的事件绑定和分派机制

简单事件框架

简单事件让开发人员直接使用字串来定义事件。而事件响应方法则是一个有act.event.On注解标注的普通Java方法。分派简单事件可以传入任何参数,这些参数都将传入事件响应方法。

申明事件响应方法

  1. public class Foo {
  2. @On(value = "customer-created", async = true)
  3. public void sendWelcomeEmail(Contact newCustomer) {
  4. ...
  5. }
  6. }

触发事件

  1. @Controller("/customer")
  2. public class CustomerController {
  3. @PostAction("/")
  4. public void createCustomer(Customer customer, @Context EventBus eventBus) {
  5. customerDao.save(customer);
  6. eventBus.trigger("customer-created", customer);
  7. }
  8. }

类型安全事件框架

类型安全事件框架实现更加传统的事件绑定和分派机制

申明事件响应方法

  1. import act.event.ActEvent;
  2. import act.event.ActEventListenerBase;
  3. import act.util.Async;
  4. @Async
  5. public class CustomerCreated extends ActEventListenerBase<ActEvent<Customer>> {
  6. @Override
  7. public void on(ActEvent<Customer> event) throws Exception {
  8. Customer customer = event.source();
  9. // send welcome email to customer
  10. }
  11. }

触发事件

  1. @Controller("/customer")
  2. public class CustomerController {
  3. @PostAction("/")
  4. public void createCustomer(Customer customer, @Context EventBus eventBus) {
  5. customerDao.save(customer);
  6. eventBus.trigger(new ActEvent<Customer>(customer));
  7. }
  8. }

两种事件框架的比较



















ProsCons
简单事件框架
简单,轻量,更易表达

没有类型安全
基于反射的事件方法调用
类型安全事件框架
类型安全; 运行时效率更高

申明事件响应器以及触发事件的代码较为冗长

返回目录