JFinal在線手冊(cè)
/ Interceptor 的觸發(fā)
Interceptor 的觸發(fā)
JFinal 中的 AOP 被劃分為控制層 AOP 以及業(yè)務(wù)層 AOP,嚴(yán)格來(lái)說(shuō)業(yè)務(wù)層 AOP 并非僅限 于在業(yè)務(wù)層使用,因?yàn)?nbsp;JFinal AOP 可以應(yīng)用于其它任何地方。
控制層攔截器的觸發(fā),只需發(fā)起 action 請(qǐng)求即可。業(yè)務(wù)層攔截器的觸發(fā)需要先使用 enhance方法對(duì)目標(biāo)對(duì)象進(jìn)行增強(qiáng),然后調(diào)用目標(biāo)方法即可。以下是業(yè)務(wù)層 AOP 使用的例子:
// 定義需要使用AOP的業(yè)務(wù)層類 public class OrderService { // 配置事務(wù)攔截器 @Before(Tx.class) public void payment(int orderId, int userId) { // service code here } } // 定義控制器,控制器提供了enhance系列方法可對(duì)目標(biāo)進(jìn)行AOP增強(qiáng) public class OrderController extends Controller { public void payment() { // 使用 enhance方法對(duì)業(yè)務(wù)層進(jìn)行增強(qiáng),使其具有AOP能力 OrderService service = enhance(OrderService.class); // 調(diào)用payment方法時(shí)將會(huì)觸發(fā)攔截器 service.payment(getParaToInt("orderId"), getParaToInt("userId")); } }
以上代碼中 OrderService 是業(yè)務(wù)層類,其中的 payment 方法之上配置了 Tx 事務(wù)攔截器, OrderController 是控制器,在其中使用了 enhance 方法對(duì) OrderSevice 進(jìn)行了增強(qiáng),隨后調(diào)用其 payment 方法便可觸發(fā) Tx 攔截器。簡(jiǎn)言之,業(yè)務(wù)層 AOP 的觸發(fā)相對(duì)于控制層僅需多調(diào)用一次 enhance 方法即可,而 Interceptor、Before、Clear 的使用方法完全一樣。