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 的使用方法則完全一樣。


#