jfinal2.0 AOP Enhancer

超凡程序猿 发布于 2015/07/18 14:46
阅读 719
收藏 1

@JFinal 你好,想跟你请教个问题:我在controller里面写

AddressService addService = enhance(AddressService.class);

然后调用其中selAllPro方法

@Before(Tx.class)

public List<Province> selAllPro() {
        return Province.dao.find("select pro_id,pro_name from province");
    }

这里的@Before(Tx.class)对方法进行了什么处理,我试过不加这个,在controller里面也可以执行成功。

如果不加,那我在controller里面直接new AddressService().getAllPro()和enhance之间有什么区别???


加载中
0
Alan-Yeh
Alan-Yeh

AOP需要一个创建切面,enhance就是这个切入点 ,切入后@Before(Tx.class)才会有效果。直接调用的话,@Before(Tx.class)是无效的。

Tx的作用是数据库事务,而在你举的例子中,get其实没有用到这类事务,所以你说两种调用方法没区别。

如果AddressService中有方法setAllPro(), 访方法中有多条数据插入行为,那么当其中的一条发生错误时,则全部插入行为都回滚。这些需要enhance(AddressService.class)才会启作用,而直接调用的话是无效的

Alan-Yeh
Alan-Yeh
回复 @超凡程序猿 : 所有的Interceptor,@Before是添加Interceptor的一种方法
超凡程序猿
超凡程序猿
enhance 只针对@Before(Tx.class) 还是针对所有的@Befor
0
JFinal
JFinal
    selAllPro() 方法是被拦截的方法,它并不知道外层拦截器的存在。拦截器可以在 selAllPro() 方法执行之前与之后添加特效,例如添加事务支持,具体添加了什么特效,取决于拦截器。
返回顶部
顶部