public class Example {
public Example() {
System.out.println("Constructor");
}
}
现在我想要一个属性“Version”,它在构造后自动给出。是否可以按注释解决它?最好的解决方案是,如果我可以在某些类之上编写类似@VersionControl的注释,然后另一个模块为类设置属性“version”。
这样的事情:
@VersionControl
public class Example {
int version; //this should be set automatically
public Example() {
System.out.println("Constructor");
}
}
有可能吗?谢谢你的帮助!
答案 0 :(得分:0)
带有注释和aspectj的解决方案:
注释:
@Target(ElementType.TYPE)
public @interface MyAnnotation{
}
方面:
@Aspect
public class MyAspect {
@Pointcut("execution((@MyAnnotation *).new(..))")
public void bla() {
}
@After("bla()")
public void after(JoinPoint joinPoint) {
try {
joinPoint.getTarget().getClass().getDeclaredField("version").set(joinPoint.getTarget(), VersionProvider.getVersion());
} catch (IllegalAccessException | NoSuchFieldException e) {
e.printStackTrace();
}
}
}
示例对象:
@MyAnnotation
public class Example {
public long version;
public long getDarwinVersion() {
return version;
}
}
在此解决方案中,将在调用带注释的类的构造函数后设置版本。