我经常在课程开头找到大量的@Inject字段。这是@Inject注释的大量冗余重复。
使用一些自定义注释魔法,是否可以编写一个新的@InjectAll注释来实现代码的简化:
之前,单独注释每个字段:
@Inject
private Logger logger;
@Inject
private Event<String> simpleMessageEvent;
之后,将所有注入的字段分组到一个组中:
@InjectAll {
private Logger logger;
private Event<String> simpleMessageEvent;
}
或任何允许我编写更紧凑代码的等效语法?
答案 0 :(得分:0)
您的提案包含两个Java语法错误:
您可以创建CDI扩展以支持
之类的内容@InjectAll({"logger", "simpleMessageEvent"})
public class MyClass {
private Logger logger;
private Event<String> simpleMessageEvent;
}
但这并不比在字段上直接使用@Inject
注释那么简洁。
答案 1 :(得分:0)
在CDI中,没有内置的方法来实现这一目标。 如前所述,您可以结合您的想象力使用CDI扩展来创建自定义语法,这将完成您想要的任务。但是,这不会使事情变得简单,可能会增加复杂性并降低代码的可读性。
我宁愿建议你再次查看你的代码,看看你是否真的需要在每个课程中进行多次注射,或者,或许,你需要将该课程重构为其他几个课程,以平均分配每个班级的责任。你所描述的通常是“超级入门课程”,几乎可以处理所有事情 - 当然,这不是最好的做法。