SpringBoot之自定义注解面向控制层切面

导读:

自定义注解,然后应用在SpringBoot Controller层,并借用AOP切面取值。有时间再扩展成权限校验。

1、注解

Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:

@Target: 说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。

作用: 用于描述注解的使用范围(即:被描述的注解可以用在什么地方)

取值(ElementType)有:

a.CONSTRUCTOR:用于描述构造器

b.FIELD:用于描述域

c.LOCAL_VARIABLE:用于描述局部变量

d.METHOD:用于描述方法

e.PACKAGE:用于描述包

f.PARAMETER:用于描述参数

g.TYPE:用于描述类、接口(包括注解类型) 或enum声明

@Retention 定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些却被编译在class文件中;编译在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载时将被读取(请注意并不影响class的执行, 因为Annotation与class在使用上是被分离的)。使用这个meta-Annotation可以对 Annotation的“生命周期”限制。

取值(RetentionPoicy)有:

a.SOURCE:在源文件中有效(即源文件保留)

b.CLASS:在class文件中有效(即class保留)

c.RUNTIME:在运行时有效(即运行时保留)

记住这两个。

2、AOP切面

a、Aspect(切面):通常是一个类,里面可以定义切入点和通知

b、JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用

c、Advice(通知):AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around

(1)Before:在目标方法被调用之前做增强处理,@Before只需要指定切入点表达式即可

(2)AfterReturning:在目标方法正常完成后做增强,@AfterReturning除了指定切入点表达式后,还可以指定一个返回值形参名returning,代表目标方法的返回值

(3)AfterThrowing:主要用来处理程序中未处理的异常,@AfterThrowing除了指定切入点表达式后,还可以指定一个throwing的返回值形参名,可以通过该形参名

来访问目标方法中所抛出的异常对象

(4)After:在目标方法完成之后做增强,无论目标方法时候成功完成。@After可以指定一个切入点表达式

顺序:进入目标方法时,先织入Around,再织入Before,退出目标方法时,先织入Around,再织入AfterReturning,最后才织入After。

(5)Around:环绕通知,在目标方法完成前后做增强处理,环绕通知是最重要的通知类型,像事务,日志等都是环绕通知,注意编程中核心是一个ProceedingJoinPoint

d、Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式

e、AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类

SpringBoot之自定义注解面向控制层切面

3、基于SpringBoot实现

SpringBoot之自定义注解面向控制层切面

类注解

SpringBoot之自定义注解面向控制层切面

方法注解

SpringBoot之自定义注解面向控制层切面

controller应用注解

SpringBoot之自定义注解面向控制层切面

定义切面

SpringBoot之自定义注解面向控制层切面

切面获取注解值

SpringBoot之自定义注解面向控制层切面

最后打印效果:

SpringBoot之自定义注解面向控制层切面

意义:挺大的,至于在实际项目中怎么运用,就看自己的领悟能力,比如:日志记录、事务控制、权限设置、各种监控校验。。。等等

注:欢迎转发,点赞,切勿转载至其他平台发布。


分享到:


相關文章: