@InjectAll注释将多个字段标记为@Inject

时间:2017-11-18 15:31:56

标签: cdi

我经常在课程开头找到大量的@Inject字段。这是@Inject注释的大量冗余重复。

使用一些自定义注释魔法,是否可以编写一个新的@InjectAll注释来实现代码的简化:

之前,单独注释每个字段:

@Inject
private Logger logger;

@Inject
private Event<String> simpleMessageEvent;

之后,将所有注入的字段分组到一个组中:

@InjectAll {
   private Logger logger;
   private Event<String> simpleMessageEvent;
}

或任何允许我编写更紧凑代码的等效语法?

2 个答案:

答案 0 :(得分:0)

您的提案包含两个Java语法错误:

  • 您无法在一个区块中对字段声明进行分组。
  • 您无法注释块。

您可以创建CDI扩展以支持

之类的内容
@InjectAll({"logger", "simpleMessageEvent"})
public class MyClass {
    private Logger logger;
    private Event<String> simpleMessageEvent;    
}

但这并不比在字段上直接使用@Inject注释那么简洁。

答案 1 :(得分:0)

在CDI中,没有内置的方法来实现这一目标。 如前所述,您可以结合您的想象力使用CDI扩展来创建自定义语法,这将完成您想要的任务。但是,这不会使事情变得简单,可能会增加复杂性并降低代码的可读性。

我宁愿建议你再次查看你的代码,看看你是否真的需要在每个课程中进行多次注射,或者,或许,你需要将该课程重构为其他几个课程,以平均分配每个班级的责任。你所描述的通常是“超级入门课程”,几乎可以处理所有事情 - 当然,这不是最好的做法。