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

### 1、了解 MethodWrap

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

<img src="/img/59a4f8512ebb493ea86d44cd27fdcbc8.png" width="400" />

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

### 2、注册 Interceptor 的方式

定义注解和拦截器（以事务注解为例）

```java
//注解（简化了代码）
public @interface Tran {...}
//拦截器
public class TranInterceptor implements MethodInterceptor{...}
```

* 通过"注解继承"改造注解。注解直接绑定对应的拦截器（日常开发更方便）

```java
@Around(TranInterceptor.class)
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Tran {...}
```


* 也可以，通过接口注册（一般在插件开发时用，方便开关控制）

```java
public class XPluginImpl implements Plugin {
    @Override
    public void start(AppContext context) {
        if (Solon.app().enableTransaction()) {
            context.beanInterceptorAdd(Tran.class, new TranInterceptor(), 120);
        }
    }
}
```


### 3、应用示例

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


