注解
注解的作用
-
1.生成文档
-
2.可以在编译期做标示或者检查的作用。
-
3.分析代码---->注解的解析
jdk中的三个基本注解
自定义注解
public @interface 注解名{}
注解属性("类型 属性名()")
-
八种基本数据类型
-
String
-
枚举类型
-
注解类型
-
Class类型
-
以上类型的一位数组
两种元注解
-
Target
-
ElementType.TYPE
-
ElementType.METHOD
-
ElementType.FIELD
-
ElementType.CONSTRUCTOR
-
-
Retention
-
RetentionPolicy.SOURCE
-
RetentionPolicy.CLASS
-
RetentionPolicy.RUNTIME
-
注解解析
Class、Method、Field都共同实现了一个接口,那么他们就都实现了该接口中的四个方法
-
getAnnotation(注解的字节码文件对象),获取某个特定的注解
-
getAnnotations(),获取所有注解
-
getDeclaredAnnotations(),获取所有注解包含父类的
-
isAnnotationPresented(注解的字节码文件对象),判断是否有某个特定的注解
代理模式
作用
-
1.如果一个对象不方便访问或者不能直接访问某个对象,那么可以访问该对象的代理
-
2.可以增强某个类的方法
-
3.可以在执行核心方法之前添加前置处理,在执行核心方法之后做后置处理
静态代理的组成部分
-
1.代理类和委托类共同实现的接口
-
2.代理类
-
3.委托类
动态代理
概念
不创建代理类,在需要代理对象的时候由反射机制动态创建代理对象。
写法
Proxy.newProxyInstance(类加载器,interfaces,InvocationHandler接口的实现类)
-
interfaces,委托者实现的所有接口的数组
-
使用委托者的字节码文件对象调用getInterfaces()方法获取到。
-
InvocationHandler接口中有一个方法,咱们实现该接口就得重写这个方法,这个方法叫invoke(object,method,args)
-
object表示代理者,咱们尽量不要使用,因为使用的话会发生递归
-
method,只要代理者调用任何方法都会走到invoke()方法中来。而method参数就是代理对象当前调用的这个方法
-
args,表示代理对象当前调用的方法传入的参数
-
invoke方法的返回值,就是代理对象当前调用的这个方法的返回值。