上面已经用@RaiseEvent和@EventListener完成了消息的广播和监听。实际上我们还可以对消息进行更详细的控制。
程序员申请费用,现在项目经理和部门经理都通过事件机制知道此事了。我们希望在同一个方法中,对事件进行分类: 如果费用小于 等于100,那么,就发送一个 applyLittleFee 的事件,如果费用大于100,则发送一个 applyMuchFee 的事件;项目经理关注 applyLittleFee 事件,而部门经理关注 applyMuchFee 的事件。ApplyBean修订如下:
public class ApplyBean {
@Bind
private int money;
@Inject
private EventBroadcaster event;
@Action
public void apply(){
System.out.println("I'm a programmer, I apply " + money + " money");
if(money <=100)
event.broadcast(this, "applyLittleFee", money);
else
event.broadcast(this, "applyMuchFee", money);
}
}此处的EventBroadcaster(事件发送对象)被注入,通过此对象,你对“发送什么事件”、“何时发送事件”都能够进行详细的控制。
这样项目经理和部门经理就可以分别监听applyLittleFee和applyMuchFee消息了。ProjectManagerBean与DepartManagerBean修订如下:
@ManagedBean(name="projectManagerBean", scope=ManagedBeanScope.SESSION)
public class ProjectManagerBean {
@EventListener("applyLittleFee")
private void applyFeeListener(int money) {
System.out.println("I'm your project manager, you apply " + money + " money.");
}
}@ManagedBean(name="departManagerBean", scope=ManagedBeanScope.SESSION)
public class DepartManagerBean {
@EventListener("applyMuchFee")
private void applyFeeListener(int money) {
System.out.println("I'm your department manager, you apply " + money + " money.");
}
}请注意,ProjectManagerBean及DepartManagerBean所感兴趣的事件也做了相应的修订,再次运行程序,分别输入100和1000,程序运行输出如下:
2008-03-01 15:10:10 信息 [con.out] I'm a programmer, I apply 100 money 2008-03-01 15:10:11 信息 [con.out] I'm your project manager, you apply 100 money.
2008-03-01 15:10:14 信息 [con.out] I'm a programmer, I apply 1000 money 2008-03-01 15:10:14 信息 [con.out] I'm your department manager, you apply 1000 money.