4.5 Interceptor的触发

  1. JFinal中的AOP被划分为控制层AOP以及业务层AOP,严格来说业务层AOP并非仅限于在业务层使用,因为JFinal AOP可以应用于其它任何地方。
  2. 控制层拦截器的触发,只需发起action请求即可。业务层拦截器的触发需要先使用enhance方法对目标对象进行增强,然后调用目标方法即可。以下是业务层AOP使用的例子:
  1. // 定义需要使用AOP的业务层类
  2. public class OrderService {
  3. // 配置事务拦截器
  4. @Before(Tx.class)
  5. public void payment(int orderId, int userId) {
  6. // service code here
  7. }
  8. }
  9.  
  10. // 定义控制器,控制器提供了enhance系列方法可对目标进行AOP增强
  11. public class OrderController extends Controller {
  12. public void payment() {
  13. // 使用 enhance方法对业务层进行增强,使其具有AOP能力
  14. OrderService service = enhance(OrderService.class);
  15.  
  16. // 调用payment方法时将会触发拦截器
  17. service.payment(getParaToInt("orderId"), getParaToInt("userId"));
  18. }
  19. }
  1. 以上代码中OrderService是业务层类,其中的payment方法之上配置了Tx事务拦截器,OrderController是控制器,在其中使用了enhance方法对OrderSevice进行了增强,随后调用其payment方法便可触发Tx拦截器。简言之,业务层AOP的触发相对于控制层仅需多调用一次enhance方法即可,而InterceptorBeforeClear的使用方法完全一样。

< 4.4 Clear

4.6 Enhancer、Duang >

原文: http://www.jfinal.com/doc/4-5