面向切面编程(AOP)的一次实践(实现方式)

业务场景:

    在多个不同的service的多个不同的方法中的第一行,或者最后一行要执行某个共同的操作。但是这个操作跟它的调用者(那些service中的那些方法)的业务逻辑其实并没有什么相关性。
如果封装一个方法,在那些service中的那些方法中去调用它,就会让代码和系统结构显得很不优雅,因为把毫不相干的业务逻辑在代码层面柔和在一起了。这种场景下,正好是面向切面编程的用武之地。

例子:

    一个“任务”包含50000个“作业”,这些作业由多个用户完成。每个用户的领取、提交、修改......等操作都会使得这个任务被激活。

实现方式:

    step1、在项目中专门定义注解的annotation包中定义一个注解(名称根据业务逻辑取,假设为AnnoActiveJob),用@interface,并且需要两个注解,@Target(ElementType.METHOD) 和 @Retention(RetentionPolicy.RUNTIME)。二者都是java.lang.annotation中的。

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnoActiveJob {}

 

上一篇:一文搞懂:自定义注解


下一篇:Springboot源码分析之番外篇