为什么CDI事件是通用的?

时间:2018-05-12 09:52:19

标签: java events java-ee cdi

让我们假设我有一个AccountService,通知何时创建或删除帐户。以下两种实施方式有何不同?

@Stateless
public class AccountService {

    @Inject
    protected Event<AccountCreated> accountCreated;

    @Inject
    protected Event<AccountDeleted> accountDeleted;


    public UserAccount createAccount(...) {
        ...(do stuff)
        accountCreated.fire(new AccountCreated(...));
    }

    public UserAccount deleteAccount(...) {
        ...(do stuff)
        accountDeleted.fire(new AccountDeleted(...));
    }
}

和更简单的版本:

@Stateless
public class AccountService {

    @Inject
    protected Event<Object> events;


    public UserAccount createAccount(...) {
        ...(do stuff)
        events.fire(new AccountCreated(...));
    }

    public UserAccount deleteAccount(...) {
        ...(do stuff)
        events.fire(new AccountDeleted(...));
    }

}

我目前正在使用第二种方法,但我想知道我是否做得不对。

1 个答案:

答案 0 :(得分:0)

您所询问的主要是良好做法,或在某些情况下是个人偏好(或多数人的声音?)。

这两种方法都可行,但第一种方法会被认为是更清洁的,因为它清楚地显示了你从第一次看它时的工作。

此外,如果你开始使用限定符,你的第二个例子会变得更加混乱。

如果您要询问有关Instance<Object>的类似问题,那么还有其他原因(使用第一种方法) - 部署期间的解决方案检查,优化无效。