我是靠谱客的博主 冷酷黑裤,最近开发中收集的这篇文章主要介绍自定义注解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、自定义注解的声明

声明的语法:


@源注解
public @interface 自定义注解的名字{
//注解的各种方法
}

二、自定义注解的各种源注解

什么是源注解:标记注解的注解

@Documented - 表示该注解会被javadoc文档记录

@Target - 表示设置当前注解的标记位置


可选值:
ElementType.ANNOTATION_TYPE - 表示当前注解可以标记其他的注解
ElementType.CONSTRUCTOR - 表示当前注解可以标记构造方法
ElementType.FIELD - 表示当前注解可以标记属性(全局变量)
ElementType.LOCAL_VARIABLE - 表示当前注解可以标记局部变量
ElementType.METHOD - 表示当前注解可以标记方法
ElementType.PACKAGE - 表示当前注解可以标记包
ElementType.PARAMETER - 表示当前注解可以标记方法形式参数
ElementType.TYPE - 表示当前注解可以标记类、接口、枚举类

@Retention - 表示当前注解的有效范围


可选值:
RetentionPolicy.SOURCE - 表示当前注解只能存在于源码,一旦编译就会丢失
RetentionPolicy.CLASS - 表示当前注解只能存在于源码和字节码文件,一旦运行就会丢失
RetentionPolicy.RUNTIME - 表示当前注解能存在于源码、字节码文件以及运行时状态

注意:如果需要通过反射操作注解,则注解必须是RUNTIME类型的

三、自定义注解中的方法

方法的声明格式:


方法的返回值类型 方法名() [default 默认值]

注意: 
    1、注解中的方法没有形参列表和方法体
    2、标记注解时,必须制定所有方法的返回值
    3、如果某个方法设置了default默认值,则标记注解时可以忽略该方法返回值的设置,如果设置了就会覆盖默认值
    4、如果有个注解的方法名为value,而且在使用注解时只设置这一个方法,则可以忽略不写方法名
    5、方法的返回值可以是一个数组,如果只给一个值,则无需大括号,如果需要给多个值,就需要大括号

四、自定义注解到底有什么用?

简单来说,自定义注解可以标记给Java中的各种成员,起到给某个成员添加一些额外属性的目的。

五、AOP的实现

什么是aop? - 面向切面编程。

SpringBoot如何整合AOP

1、添加依赖


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2、编写切面类


/**
* 切面类
*
* 前置增强
* 后置增强
* 环绕增强
* 异常增强
* 后置完成增强
*
*/
@Aspect
@Component //切面类必须让spring扫描到
public class LoginAop {
/**
 * 环绕增强
 *
 * @Around(切点表达式)
 *
 * 切点表达式 - 表示当前确定增强哪些方法
 * @annotation(IsLogin) - 表示标记了@IsLogin注解的方法就会被这个环绕增强植入
 *
 * @return
 */
@Around("@annotation(IsLogin)")
public Object loginAop(ProceedingJoinPoint joinPoint){


    System.out.println("调用目标方法前做一些事情.....");
    Object result = null;
    try {
        //调用目标方法
        result = joinPoint.proceed();
    } catch (Throwable throwable) {
        throwable.printStackTrace();
    }
    System.out.println("调用目标方法后做一些事情.....");


    return result;
}
}

最后

以上就是冷酷黑裤为你收集整理的自定义注解的全部内容,希望文章能够帮你解决自定义注解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部