Solon v3.0.3

六、Action 结构图及两种注解处理

</> markdown

1、相关接口

接口说明
-name()->String名字
-mapping()->Mapping映射
-method()->MethodWrap方法包装器
-controller()->BeanWrap控制类包装器
-produces()->String生产内容(主要用于文档生成)
-consumes()->String消费内容 (主要用于文档生成)

2、获取方式

Action action = ctx.action(); //可能为 null

3、两种重要的注解处理

Action 本质上是 Handler 和 Class Method 的结合。所以支持两种风格的注解和拦截处理:

@Around@Addition
注解对象Method(任何 Bean 可用)Action(仅 Web 控制器可用)
附加内容InterceptorFilter

a) Handler 的附加过滤处理(@Addition)

具体参考: 《@Addition 使用说明(AOP)》 。可以在 Method 参数转换之前执行(一般用做提前校验);也可以在 Method 执行并输出后执行。例如:

@Addition(WhitelistFilter.class)
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Whitelist { }

@Controller
public class DemoController{
    @Whitelist
    @Mapping("user/del")
    public void delUser(..){  }
}

b) Class Method 的包围拦截处理(@Around)

具体参考:《@Around 使用说明(AOP)》《切面与环绕拦截》

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

@Controller
public class DemoController{
    @Tran
    @Mapping("user/del")
    public void delUser(..){  }
}

@Component
public class DemoService{
    @Tran
    public void delUser(..){  }
}