Skip to content

Latest commit

 

History

History
101 lines (80 loc) · 2.03 KB

event.md

File metadata and controls

101 lines (80 loc) · 2.03 KB

事件

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

简单事件框架

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

申明事件响应方法

public class Foo {
    @On(value = "customer-created", async = true)
    public void sendWelcomeEmail(Contact newCustomer) {
        ...
    }
}

触发事件

@Controller("/customer")
public class CustomerController {
    
    @PostAction("/")
    public void createCustomer(Customer customer, @Context EventBus eventBus) {
        customerDao.save(customer);
        eventBus.trigger("customer-created", customer);
    }
}

类型安全事件框架

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

申明事件响应方法

import act.event.ActEvent;
import act.event.ActEventListenerBase;
import act.util.Async;

@Async
public class CustomerCreated extends ActEventListenerBase<ActEvent<Customer>> {
    @Override
    public void on(ActEvent<Customer> event) throws Exception {
        Customer customer = event.source();
        // send welcome email to customer
    }
}

触发事件

@Controller("/customer")
public class CustomerController {
    
    @PostAction("/")
    public void createCustomer(Customer customer, @Context EventBus eventBus) {
        customerDao.save(customer);
        eventBus.trigger(new ActEvent<Customer>(customer));
    }
}

两种事件框架的比较

ProsCons
简单事件框架 简单,轻量,更易表达 没有类型安全
基于反射的事件方法调用
类型安全事件框架 类型安全; 运行时效率更高 申明事件响应器以及触发事件的代码较为冗长

返回目录