步驟
1.創(chuàng)建一個(gè)@interface
2.String value();抽象方法用以接收數(shù)據(jù)
3.使用元注解,描述自定義注解
4.@Target指定注解可以加在哪里
ElementType.TYPE:可在類和接口上面
ElementType.METHOD:可方法上
ElementType.FIELD:可在屬性
5.@Retention指定注解在什么時(shí)候有用
RetentionPolicy.RUNTIME:注解保留到運(yùn)行時(shí)
RetentionPolicy.ClASS:注解保留到Class文件中
RetentionPolicy.SOURCE:注解保留到j(luò)ava編譯時(shí)期
@Inherited可以被繼承
Paste_Image.png
Paste_Image.png
Paste_Image.png
動(dòng)態(tài)代理:
①被代理類必須實(shí)現(xiàn)一個(gè)接口(任意接口)
Paste_Image.png
②創(chuàng)建一個(gè)類實(shí)現(xiàn)InvocationHandler,該類用來(lái)對(duì)象代理對(duì)象進(jìn)行方法的增強(qiáng)
③在invoke()方法中調(diào)用被代理對(duì)象的方法,并且添加增強(qiáng)的代碼
Paste_Image.png
④通過(guò)Proxy.newProxyInstance(ClasLoader, Class, InvovationHandler)創(chuàng)建代理類對(duì)象
⑤調(diào)用代理對(duì)象的方法
Paste_Image.png