自定义注解&代理

代理

jdk代理

要求目标需要有接口

cglib

产生的代理对象是继承目标对象,要求目标不能被final修饰

spring产生的代理动态对象时,用jdk还是cglib???

有一个DefaultAopProxyFactory 产生代理对象的工厂类

看目标有没有接口,如果有接口则用jdk,没有则用cglib

springboot2.0 开始,全部默认采用cglib

自定义注解

1、@Documented:指定被标注的注解会包含在javadoc中。

  2、@Retention: 指定注解的生命周期(源码、class文件、运行时),其参考值见类的定义:java.lang.annotation.RetentionPolicy

  ●   RetentionPolicy.SOURCE : 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们不会写入字节码。@Override, @SuppressWarnings都属于这类注解。
  ●   RetentionPolicy.CLASS : 在类加载的时候丢弃。在字节码文件的处理中有用。注解默认使用这种方式。
  ●   RetentionPolicy.RUNTIME : 始终不会丢弃,运行期也保留该注解,因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种方式

 3、@Target:指定注解使用的目标范围(类、方法、字段等),其参考值见类的定义:java.lang.annotation.ElementType

  ● ElementType.CONSTRUCTOR :用于描述构造器。
  ● ElementType.FIELD :成员变量、对象、属性(包括enum实例)。
  ● ElementType.LOCAL_VARIABLE: 用于描述局部变量。
  ● ElementType.METHOD : 用于描述方法。
  ● ElementType.PACKAGE :用于描述包。
  ● ElementType.PARAMETER :用于描述参数。
  ● ElementType.ANNOTATION_TYPE:用于描述参数
  ● ElementType.TYPE :用于描述类、接口(包括注解类型) 或enum声明。 

 4、@Inherited:指定子类可以继承父类的注解,只能是类上的注解,方法和字段的注解不能继承。即如果父类上的注解是@Inherited修饰的就能被子类继承。

 5、@Native:指定字段是一个常量,其值引用native code。

 6、@Repeatable:注解上可以使用重复注解,即可以在一个地方可以重复使用同一个注解,像spring中的包扫描注解就使用了这个。

 7、使用@interface关键词来定义注解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值