@Around 使用说明(AOP)
这是一个 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){
//...
}
}