Spring注解@Target @Retention @Documented @Inherited

参考实例
@Target({ ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface SystemLog {
	boolean value() default true;
}
一、@Retention

@Retention注解可以用来修饰其他注解,是注解的注解,称为元注解。@Retention注解有一个属性value,是RetentionPolicy类型的。Enum RetentionPolicy是一个枚举类型。

按生命周期将RetentionPolicy划分为3类:

  • RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃
  • RetentionPolicy.CLASS:注解被保留到class文件,但JVM加载class文件时候被遗弃,这是默认的生命周期
  • RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,JVM加载class文件之后,仍然存在

3个生命周期分别对应于:Java源文件(.java文件) —> .class文件 —> 内存中的字节码

二、@Documented

@Documented注解也可以用来修饰其他注解,是注解的注解,称为元注解。表明被修饰的内容应该被javadoc工具记录。默认情况下,javadoc是不包含注解的。但是如果声明注解时指定了@Documented,则它会被javadoc之类的工具处理,所以注解类型信息也会被包含在生成的文档中,是一个标记注解,没有成员。

三、@Target

@Target注解说明了Annotation所修饰的对象范围。Annotation可被用于packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造函数、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。总体而言,@Target用于描述注解的使用范围(即:被描述的注解可以用在什么地方)

  • CONSTRUCTOR:用于描述构造器
  • FIELD:用于描述域
  • LOCAL_VARIABLE:用于描述局部变量
  • METHOD:用于描述方法
  • PACKAGE:用于描述包
  • PARAMETER:用于描述参数
  • TYPE:用于描述类、接口(包括注解类型) 或enum声明
四、@Inherited

@Inherited注解也可以用来修饰其他注解,是注解的注解,称为元注解。@Inherited元注解指定被它修饰的注解将具有继承性,如果某个类使用了@XXX注解(定义该注解时使用了@Inherited注解),其子类自动被@XXX修饰。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`@Transactional` 是 Spring 框架中用于实现事务管理的注解之一,可以用在方法或者类上面。在方法上使用 `@Transactional` 注解,表示该方法需要进行事务管理,如果该方法执行过程中抛出异常,那么事务将回滚到方法执行前的状态。在类上使用 `@Transactional` 注解,则表示该类中的所有方法都需要进行事务管理。 下面对 `@Transactional` 注解的源码进行讲解。 首先,`@Transactional` 注解是一个 meta-annotation,即它本身也是一个注解,它的定义如下: ```java @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface Transactional { //... } ``` `@Target` 注解表示该注解可以用于哪些元素上面,`@Retention` 注解表示该注解的生命周期,`@Inherited` 注解表示该注解是否可以被子类继承,`@Documented` 表示该注解是否需要被 javadoc 工具记录。 `@Transactional` 注解中有一些属性可以进行配置,如下: ```java public @interface Transactional { //... Propagation propagation() default Propagation.REQUIRED; Isolation isolation() default Isolation.DEFAULT; int timeout() default -1; boolean readOnly() default false; Class<? extends Throwable>[] rollbackFor() default {}; String[] value() default {}; } ``` 其中,`Propagation` 表示事务的传播行为,`Isolation` 表示事务的隔离级别,`timeout` 表示事务的超时时间,`readOnly` 表示事务是否只读,`rollbackFor` 表示哪些异常需要回滚事务,`value` 表示该方法需要参与哪些事务。 在 Spring 中,`@Transactional` 注解的实现是通过自定义 AOP 的方式实现的。Spring 将 `@Transactional` 注解解析出来,然后根据注解的属性值创建一个事务增强器(TransactionInterceptor),然后将该增强器织入到需要进行事务管理的方法或类中。当程序执行到被增强的方法时,事务增强器会根据注解的属性值创建一个事务,并将该事务与当前线程绑定。如果方法执行过程中抛出异常,那么事务将回滚到方法执行前的状态。如果方法执行成功,则事务将提交。 总体来说,`@Transactional` 注解Spring 框架中非常重要的一个注解,它提供了简单易用的方式来实现事务管理,大大简化了开发人员的工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值