业务场景:
在多个不同的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 {}