是否可以用java创建注释包(即应用其他注释的注释)?
假设在代码库中经常看到以下代码:是否可以用java创建注释包(即应用其他注释的注释)?,java,spring,annotations,aop,lombok,Java,Spring,Annotations,Aop,Lombok,假设在代码库中经常看到以下代码: // old wet code @AnnotationA @AnnotationB @AnnotationC class SomeClass { // ... } 是否可以创建一个注释AnnotationBundle,以应用其他注释(A、B、C)并生成相同的功能?这将只用于干燥代码库,并且不会意外地忘记类上的单个注释 // new DRY code @AnnotationBundle class SomeClass { // ... } 在Jav
// old wet code
@AnnotationA
@AnnotationB
@AnnotationC
class SomeClass {
// ...
}
是否可以创建一个注释AnnotationBundle
,以应用其他注释(A、B、C)并生成相同的功能?这将只用于干燥代码库,并且不会意外地忘记类上的单个注释
// new DRY code
@AnnotationBundle
class SomeClass {
// ...
}
在Java中,通过伪造元注释(例如,)看起来这在技术上是可能的 但并非所有注释都是如此——例如,lombok还不允许这样做,并将注释限制为类类型(而不是
@interface
)。简短回答
不,你不能。Java中没有元注释的概念
备选方案1:Spring注释
有人提到了Spring元注释。是的,在Spring中您可以这样做,但这仅仅是因为Spring实现了一些非常令人印象深刻的内部机制,包括反射和其他机制,以便实现这个概念。所以
- 要么使用Spring并依赖其功能
- 或者重建类似的东西,并确保您自己的应用程序使用您正在构建的框架
- 或者提取Spring注释内容并在Spring之外使用它
作为替代方案,您可以使用AspectJ(我说的是真正的AspectJ,而不是Spring AOP)和ITD(类型间定义),例如,使类实现接口或声明类型上的注释。通过这种方式,您可以实现一个方面来模拟元注释。aspect会处理所有事情,应用程序不需要了解它。不过,我不确定您是否想学习AOP来实现这一点。这将有助于结合lombok和Spring注释,例如
RequiredArgsConstructor
+Slf4j
+服务
谢谢您的回答!我知道一些AOP,但我假设注释会在运行时工作,但在开发期间不会显示生成的方法等(例如,lombok插件不会通过IntelliJ中的AspectJ检测注释)。