注释

@Target(ElementType.METHOD)
/*
@Target:注解的作用目标,用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
@Target(ElementType.TYPE)——接口、类、枚举、注解
@Target(ElementType.FIELD)——字段、枚举的常量
@Target(ElementType.METHOD)——方法
@Target(ElementType.PARAMETER)——方法参数
@Target(ElementType.CONSTRUCTOR) ——构造函数
@Target(ElementType.LOCAL_VARIABLE)——局部变量
@Target(ElementType.ANNOTATION_TYPE)——注解
@Target(ElementType.PACKAGE)——包
*/

何为注解?注解本质上就是一个类,开发中我们可以使用注解 取代 xml配置文件。

@Documented
/*
表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中,是一个标记注解,没有成员。
只是用来做标识,没什么实际作用.
*/
--------------------------------------

@Retention(RetentionPolicy.RUNTIME)
/* 
@Retention定义了该Annotation被保留的时间长短:
1.某些Annotation仅出现在源代码中,而被编译器丢弃;
2.另一些却被编译在class文件中,注解保留在class文件中,在加载到JVM虚拟机时丢弃,这是默认行为,所以没有用Retention注解的注解,都会采用这种策略
3.而另一些在class被装载时将被读取,注解保留在程序运行期间,此时可以通过反射获得定义在某个类上的所有注解
作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
取值(RetentionPoicy)有:
    1.SOURCE:在源文件中有效(即源文件保留)
    2.CLASS:在class文件中有效(即class保留)
    3.RUNTIME:在运行时有效(即运行时保留)
*/
--------------------------------------

@Inherited
/*
说明子类可以继承父类中的该注解
*/
--------------------------------------

@Target(ElementType.METHOD)
/*
@Target:注解的作用目标,用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
@Target(ElementType.TYPE)——接口、类、枚举、注解
@Target(ElementType.FIELD)——字段、枚举的常量
@Target(ElementType.METHOD)——方法
@Target(ElementType.PARAMETER)——方法参数
@Target(ElementType.CONSTRUCTOR) ——构造函数
@Target(ElementType.LOCAL_VARIABLE)——局部变量
@Target(ElementType.ANNOTATION_TYPE)——注解
@Target(ElementType.PACKAGE)——包
*/
--------------------------------------

@NonNull
/*
在方法或构造函数的参数上使用,生成一个空值检查语句。用于指明所修饰的参数,字段或方法的值不可以为null。它是JSR 305(缺陷检查框架)的注解,是告诉编译器这个域不可能为空,当代码检查(静态检查)有空值时会给出一个风险警告。运行时不报任何警告,根据实际值得情况运行时可能出现空指针异常。 目前这个注解只有IDEA支持。实际好多静态扫描工具中有此注解符号
*/
--------------------------------------

@NotNull
/*
使用在Bean的字段注解中。它是 JSR303(Bean的校验框架)的注解,在controller的方法中验证时(运行时检查一个属性是否为空)使用,如果不合法(为空),注解中的提示信息会保存在result中。
*/
--------------------------------------

@Order(Ordered.HIGHEST_PRECEDENCE)
/*
注解@Order或者接口Ordered的作用是:
常用于定义的AOP先于事务执行,控制配置类的加载顺序,定义Spring IOC容器中Bean的执行顺序的优先级,而不是定义Bean的加载顺序,Bean的加载顺序不受@Order或Ordered接口的影响。值越小,越先执行,参数 Ordered.HIGHEST_PRECEDENCE 默认是最小值。
*/
--------------------------------------

@Aspect
/*
切面声明,标注在类、接口(包括注解类型)或枚举上。作用是把当前类标识为一个切面供容器读取。
*/
--------------------------------------

@Pointcut
/*
切入点声明,即切入到哪些目标类的目标方法。value 属性指定切入点表达式,默认为 "",用于被通知注解引用,这样通知注解只需要关联此切入点声明即可,无需再重复写切入点表达式。Pointcut是植入Advice的触发条件。每个Pointcut的定义包括2部分,一是表达式,二是方法签名。方法签名必须是 public及void型。可以将Pointcut中的方法看作是一个被Advice引用的助记符,因为表达式不直观,因此我们可以通过方法签名的方式为 此表达式命名。因此Pointcut中的方法只需要方法签名,而不需要在方法体内编写实际代码。
*/
--------------------------------------

@Before	
/*
前置通知, 在目标方法(切入点)执行之前执行。
value 属性绑定通知的切入点表达式,可以关联切入点声明,也可以直接设置切入点表达式
注意:如果在此回调方法中抛出异常,则目标方法不会再执行,会继续执行后置通知 -> 异常通知。
*/
--------------------------------------

@After
/*
后置通知, 在目标方法(切入点)执行之后执行。
不管是抛出异常或者正常退出都会执行。
*/
--------------------------------------

@Around
/*
环绕通知:目标方法执行前后分别执行一些代码,类似拦截器,可以控制目标方法是否继续执行。
通常用于统计某个方法的运行时间,参数校验等等操作。
环绕通知早于前置通知,晚于返回通知!!!
*/
--------------------------------------

@AfterReturning	
/*
返回通知, 在目标方法(切入点)返回结果之后执行,在 @After 的后面执行。
pointcut 属性绑定通知的切入点表达式,优先级高于 value,默认为 ""
*/
--------------------------------------

@AfterThrowing	
/*
异常通知, 在方法抛出异常之后执行, 意味着跳过返回通知
pointcut 属性绑定通知的切入点表达式,优先级高于 value,默认为 ""
注意:如果目标方法自己 try-catch 了异常,而没有继续往外抛,则不会进入此回调函数。
*/
--------------------------------------

@component
/*
作用就是实现配置一个bean,实现bean的注入,相当于在XML中写<bean class="">
泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services、@Repository等的时候),就可以使用@Component来标注这个类。
*/

@Target(ElementType.METHOD)
/*
@Target:注解的作用目标,用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
@Target(ElementType.TYPE)——接口、类、枚举、注解
@Target(ElementType.FIELD)——字段、枚举的常量
@Target(ElementType.METHOD)——方法
@Target(ElementType.PARAMETER)——方法参数
@Target(ElementType.CONSTRUCTOR) ——构造函数
@Target(ElementType.LOCAL_VARIABLE)——局部变量
@Target(ElementType.ANNOTATION_TYPE)——注解
@Target(ElementType.PACKAGE)——包
*/

Comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注