注解的作用:
- 不是程序本身,可对程序作出解释(注释也有此作用)
- 可以被其他程序(如编译器)读取(与注释的区别)
常用的注解:
JDK自带注解:
- @Override 重写方法
- @Deprecation 表示方法已经过时,方法上有横线,使用时会有警告。
- @SuppviseWarnings 压制警告
- deprecation 使用了不赞成使用的类或方法时的警告
- unchecked 执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。
- fallthrough 当 Switch 程序块直接通往下一种情况而没有 Break 时的警告。
- path 在类路径、源文件路径等中有不存在的路径时的警告。
- serial 当在可序列化的类上缺少 serialVersionUID 定义时的警告。
- finally 任何 finally 子句不能正常完成时的警告。
元注解
- @Target({XXX,XXX}) 注解的作用域
- ElemenetType.CONSTRUCTOR 构造器声明
- ElemenetType.FIELD 域声明(包括 enum 实例)
- ElemenetType.LOCAL_VARIABLE 局部变量声明
- ElemenetType.METHOD 方法声明
- ElemenetType.PACKAGE 包声明
- ElemenetType.PARAMETER 参数声明
- ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
- ElementType.ANNOTATION_TYPE 注解
- @Retention(XXX) 注解的作用级别
- RetentionPolicy.SOURCE 注解将被编译器丢弃
- RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
- RetentionPolicy.RUNTIME JVM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
Spring常用注解
IOC
- @Component(value=”….”) 相当于配置方式中的id=”…”,即给这个类声明一个id
- @Controller //Web层类
- @Service //业务层
- @Repository //持久层(后三个为Component的扩展,现阶段完全等效)
- @scope(value=”…”) value取值:
- singleton单例
- prototype多例
- @Value(value=”…”) 属性注入(基本数据类型和String)
- @Autowired 属性注入(对象注入,自动)
- @Resource(name=”…”) 属性注入(对象注入,常用,name的值为注入类的id,可省略)
AOP
- @Aspect 切面,用于增强类上
- @Before(value = “…”) 前置增强,用于切入点上(增强的方法) value取值:
- execution(* com.aoptest.test2.Student.Show(..)) 所有所属类型(指private、public等所有)com.aoptest.test2包下Student类中Show()方法的所有方法(考虑重载)
- execution(* com.aoptest.test2.Student.*(..)) Student类中所有方法
- execution(* *.*(..)) 项目下所有方法
- @Around 环绕增强,可实现方法执行前后操作,需要在方法内执行point.proceed(); 并返回结果。
- @AfterReturning 后置增强
- @AfterThrowing 异常增强
- @After 后置增强
(其他常用注解更新中…)
自定义注解(@interface)
@Target(value = {ElementType.TYPE}) //作用域 类
@Retention(RetentionPolicy.RUNTIME) //保留策略 运行时有效
public @interface Table {
String value();
}
- 用java的反射机制使用注解