Solon v3.0.3

@Around 使用说明(AOP)

</> markdown

这是一个 Bean Aop 的注解,用于简化 AOP 开发。

1、了解 MethodWrap

所有支持 AOP 的方法,内部都是通过 MethodWrap 执行的。其中 invokeByAspect 接口,提供了环绕式拦截支持:

@Around 即应用在 “InterceptorChain” 位置。

2、注册 Interceptor 的方式

定义注解和拦截器(以事务注解为例)

//注解(简化了代码)
public @interface Tran {...}
//拦截器
public class TranInterceptor implements Interceptor{...}
  • 通过"注解继承"改造注解。注解直接绑定对应的拦截器(日常开发更方便)
@Around(TranInterceptor.class)
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Tran {...}
  • 也可以,通过接口注册(一般在插件开发时用,方便开关控制)
public class XPluginImpl implements Plugin {
    @Override
    public void start(AppContext context) {
        if (Solon.app().enableTransaction()) {
            context.beanInterceptorAdd(Tran.class, new TranInterceptor(), 120);
        }
    }
}

3、应用示例

@Component
public class DemoService {
    //添加事务注解
    @Tran
    public void addUser(UserDo user){
        //...
    }
}