Interceptor 的觸發
JFinal 中的 AOP 被劃分為控制層 AOP 以及業務層 AOP,嚴格來說業務層 AOP 並非僅限 於在業務層使用,因為 JFinal AOP 可以應用於其它任何地方。
控制層攔截器的觸發,只需發起 action 請求即可。業務層攔截器的觸發需要先使用 enhance方法對目標物件進行增強,然後呼叫目標方法即可。以下是業務層 AOP 使用的範例:
// 定义需要使用AOP的业务层类 public class OrderService { // 配置事务拦截器 @Before(Tx.class) public void payment(int orderId, int userId) { // service code here } } // 定义控制器,控制器提供了enhance系列方法可对目标进行AOP增强 public class OrderController extends Controller { public void payment() { // 使用 enhance方法对业务层进行增强,使其具有AOP能力 OrderService service = enhance(OrderService.class); // 调用payment方法时将会触发拦截器 service.payment(getParaToInt("orderId"), getParaToInt("userId")); } }
以上程式碼中 OrderService 是業務層類,其中的 payment 方法之上配置了 Tx 事務攔截器, OrderController 是控制器,在其中使用了 enhance 方法對 OrderSevice 進行了增強,隨後調用其payment 方法便可觸發 Tx 攔截器。簡言之,業務層 AOP 的觸發相對於控制層僅需多呼叫一次 enhance 方法即可,而 Interceptor、Before、Clear 的使用方法則完全一樣。