问题背景:
注解在Java 5中出现,目的是为字节码添加元信息,而不改变程序的逻辑。通过注解,可以方便地为类和方法提供额外的信息,以供框架、编译器或解析器使用。
问题:
设计不当或使用不当的注解会导致代码维护复杂化。开发人员有时会混淆注解的适用性或不知道如何自己创建注解,也不知道可以使用带参数的注解。
解决方案:
创建自定义注解:
import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyTest { String value() default ""; }
使用注解:
public class TestClass { @MyTest("Example") public void testMethod() {...} }
关键特点:
注解可以继承自其他注解吗?
回答:不可以,Java中的注解不支持相互继承。
可以让注解在所有子类中作为强制要求吗?
回答:不可以直接。必须通过反射手动检查注解的存在,来实现类似的控制。
@Retention(Class)和@Retention(RUNTIME)有什么不同?
回答:
在项目中决定用注解替换xml配置,但未添加@Retention(RUNTIME)
优点:
缺点:
为控制商业操作审计的方法设置了自定义注解@Audit,并在服务器上实际调用逻辑时使用反射。
优点:
缺点: