JDK自带的三个注解:
@Override 子类覆写父类的方法,或实现接口中的某个方法。
@Deprecated 表明此方法已经过时了,不提倡使用
如果一定要使用这个过时的方法,就需要使用
@SuppressWarnings("deprecation") 抑制这个警告
常见的第三方注解:
Spring:@Autowired 自动植入,不需要写配置文件配置bean
@Service 用于标注业务层组件
@Controller 用于标注控制层组件,表明该类为控制器类
@RequestMapping 请求映射
注解按照运行机制分为:
源码注解 注解仅存在于源文件中,编译成.class文件就不在了
编译时注解 注解在源码和.class文件中都存在(如JDK自带的)
运行时注解 在运行阶段还起作用,甚至影响程序运行逻辑
元注解:给注解添加的注解,称为元注解。
@Target(ElementType.Method) 作用域,表明该注解使用到方法上
@Retention(RetentionPolicy.RUNTIME) 生命周期
@Inherited 可以继承的
@Document 生成javadoc时会包含注解
public @interface Desc{
String desc(); //无参数,无异常方式成员
String author();
int age() default 18; //可以自动设置默认值
}
如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=)
如何使用自定义注解:
@Desc(desc="...",author="....",age=23)
public String foo{
.....
}
如何解析注解:java反射机制,通过字节码文件获取方法上的注解
Class c=Class.forName("类的全限定名");
Method[] ms=c.getMethods();
for(Method m:ms){
//判断此方法上是否有Desc注解
boolean isExist=m.isAnnotationPresent(Desc.class);
if(isExist){
Desc d=(Desc) m.getAnnotation(Desc.class);
System.out.println(d.value());
}
}