Spring:注释驱动的事务管理器

我正在建立一个新的JPA + Spring项目。 有什么区别(对于我作为程序员而言):

 

  

在我的applicationContext.xml中?

代理和字节代码之间存在巨大差异。 代理只能在调用来自“外部空间”时进行拦截,但如果调用来自对象本身则不会拦截(this.transactionMethod())

这意味着如果你有一个带有两个方法的类,T和B.方法T有一个事务注释,方法B通过“this.T() ”调用T ,那么代码永远不会被调用(对于T )所以没有这种情况下的交易处理!

如果使用AspectJ,则事务处理代码在T的字节代码中是变形的,无论调用是来自对象本身还是来自其他对象,它都将被执行。

文档说:

默认模式“proxy”使用Spring的AOP框架处理要注释的注释bean(遵循代理语义,如上所述,仅适用于通过代理进入的方法调用)。 替代模式“aspectj”用Spring的AspectJ事务方面​​编织受影响的类,修改目标类字节代码以应用于任何类型的方法调用。 AspectJ编织需要在类路径中使用spring-aspects.jar以及启用加载时编织(或编译时编织)。 (有关如何设置加载时编织的详细信息,请参见第7.8.4.5节“弹簧配置”。)

从开发人员的角度来看,无关紧要的是使用哪种模式。