java - 当在 CDI 中对事件使用自定义注释时,此位置不允许使用注释 "@Added"

标签 java events cdi

当在 @Observes 限定符附近使用自定义限定符来捕获事件时,出现此编译错误。

所有类都在同一个包中,因此问题不在于导入语句。我已经查过了。

@Inject
private Logger logger;
List<Book> inventory = new ArrayList<>();

public void addBook(@Observes @Added Book book) {
    logger.warning("adding book" + book.getTitle());
    inventory.add(book);
}

public void removeBook(@Observes @Removed Book book) {
    logger.warning("remove book");
}

所以,这一行: public void addBook(@Observes @Added Book book) {

这样:public void removeBook(@Observes @Removed Book book) {

标有以下错误:此位置不允许使用注释 @Added (@Removed)。

这里是定义方法addBook 和removeBook 的代码。这里没有问题。

@Inject
@Added
private Event<Book> bookAddedEvent;

@Inject
@Removed
private Event<Book> bookRemovedEvent;

public Book createBook(String title, float price, String description) {
    Book book = new Book(title, price, description);
    book.setNumber(numberGenerator.generateNumber());

    bookAddedEvent.fire(book);
    return book;
}

public void deleteBook(Book book) {
    bookRemovedEvent.fire(book);
}

最佳答案

限定符注释 @Added@Removed 的定义是什么?

您可能缺少 @Target 列表中的 PARAMETER 条目:

@Target({ TYPE, METHOD, PARAMETER, FIELD })

关于java - 当在 CDI 中对事件使用自定义注释时,此位置不允许使用注释 "@Added",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28231004/

相关文章:

java - 在 Drools 中为组执行单个规则

java - 将用户输入放入数组索引中的某个点

javascript - 加载特定元素后可以调用函数吗?

javascript - 传单 - 互动 map - 添加事件

java - 将运行时参数传递给包含注入(inject)的对象

java - 如何在 Java - Android 的另一个类中调用我的数据库助手类的方法

java - 使用 for 循环将二维数组转换为一维数组

python - 子窗口关闭时如何清除存储在父应用程序中的子窗口引用?

java - 将 CDI 与 AsyncResponse 和 ExecutorService 结合使用

java - java se环境下应用程序如何 Weld 容器服务?