一、注解概念:
注释:给人看的信息,人看了提示信息了解程序的内容。 eg: // /* */ /** */
注解:给程序看的提示信息,JDK1.5开始提供的新特性。程序看后可根据有无注解及注解上属性的不同配置执行不同的逻辑。 Java中的注解格式:@AnnoName(key = value, ...)
*注解在开发中,可以作为轻量级配置来使用,比起实用xml作为配置文件,更加的轻便易用,在Java开发中大量使用。 --- @Bean @Select @Resource ...
二、jdk三种内置注解:
1.@Override:声明重写父类方法的注解,要求编译器帮我们检查是否成功的覆盖,如果没有成功覆盖方法,编译器将会进行报错提示。
2.@Deprecated:声明方法被过时,不再建议使用,要求编译器在编译的过程中对于这样的方法的调用提出警告,提示方法过时。
3.@SuppressWarnings:压制警告,提示编译器,在编译的过程中对指定类型的警告不再提示。 --- 自动忽略警告
三、自定义注解开发:

四、元注解:给注解 注解 的 注解
1.开发一个注解类,非常类似于开发一个接口,只不过需要通过@interface关键字来声明。
eg: public @interface log{ }
2.使用元注解修饰注解的声明:所谓的元注解是用来修饰注解声明的注解,可以控制被修饰的注解的特性。
a.@Target:被修饰的注解可以用在什么位置。
@Target(ElementType.TYPE)——接口、类、枚举、注解
@Target(ElementType.FIELD)——字段、枚举的常量
@Target(ElementType.METHOD)——方法
@Target(ElementType.PARAMETER)——方法参数
@Target(ElementType.CONSTRUCTOR) ——构造函数
@Target(ElementType.PACKAGE)——包



b.@Retention:用来声明被修饰的注解会被保留到什么阶段。
@Retention(RetentionPolicy.SOURCE):注解在源码时有效,将会被编译器抛弃。

@Retention(RetentionPolicy.CLASS):注解在编译时有效,但在运行时没有保留。这也是默认行为。class文件中保留注解
@Retention(RetentionPolicy.RUNTIME):运行时有效,并且可以通过反射获取。
class文件里面的东西由类加载器加载到内存中去,类加载器在加载class文件时,会对class文件里面的东西进行处理,如安全检查,处理完以后得到的最终在内存中的二进制的东西才是字节码,类加载器在把class文件加载到内存中时也有转换,转换时是否把class文件中的注解保留下来?class范围不保留,runtime则保留

运行时注解是通过反射来实现注解处理器的,对性能稍微有一点损耗,而编译时注解是在程序编译期间生成相应的代理类,替我们完成某些功能。
c.@Documented:用来声明被修饰注解是否要被文档提取工具提取到文档中。默认不提取。

d.@Inherited:被修饰的注解是否有继承性。默认没有继承性





3.为注解增加属性:注解类中声明的属性必须是public的,可以显示声明,也可以不声明,不声明默认就是public的
注解类中的属性只能是八种基本数据类型、String类型、Class类型、枚举类型、其它注解类型及以上类型的一维数组
注解中声明的属性,需要在注解时为其赋值,赋值的方式就是在使用注解时,在注解后跟一对小括号,在其中通过 属性名=属性值 的方式指定属性的值
也可以在声明注解时,在注解的属性后通过 default关键字 声明属性的默认值,声明过默认值的属性,在使用注解时不指定属性则使用默认值,如果指定,则覆盖默认值
如果属性是 一维数组类型 而在传入的数组中 只有一个值 则包括数组的大括号可以省略
如果注解的属性 只有一个需要赋值 且该属性的名称叫做value 则在使用注解时 value= 可以不写
五、反射注解:
1.原理:RententionPolicy.RUNTIME级别的注解回保留到运行期,可以通过反射技术获取,从而可以根据是否有注解 或 注解属性值的不同控制程序按照不同方式运行
a.isAnnotationPresent():如果指定类型的注释存在此元素上,则返回true,否则返回false
b.getAnnotation():如果存在该元素的指定类型的属性值,则返回这些属性,否则返回null
c.getAnnotations():返回此元素上存在的所有属性值
六、Spring的五大通知类型
a. 前置通知 @Before:在目标方法执行之前执行执行的通知
b. 环绕通知 @Around:在目标方法执行之前和之后都可以执行额外代码的通知。
c. 后置通知 @AfterReturning:在目标方法执行之后执行的通知。
d. 异常通知 @AfterThrowing:在目标方法抛出异常时执行的通知
e. 最终通知 @After:是在目标方法执行之后执行的通知。
eg:

无异常情况下:

有异常情况下




网友评论