Xml代码
-
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
-
-
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
-
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
-
xmlns:
aop
=
"http://www.springframework.org/schema/
aop
"
-
xmlns:tx
=
"http://www.springframework.org/schema/tx"
-
xmlns:context
=
"http://www.springframework.org/schema/context"
-
xsi:schemaLocation
="http://www.springframework.org/schema/beans
-
http://www.springframework.org/schema/beans/spring
-beans.xsd
-
http://www.springframework.org/schema/tx
-
http://www.springframework.org/schema/tx/spring
-tx.xsd
-
http://www.springframework.org/schema/aop
-
http://www.springframework.org/schema/aop
/spring
-aop
.xsd "
-
>
-
-
<
bean
id
=
"transactionManager"
-
class
=
"org.springframework.orm.hibernate3.HibernateTransactionManager"
-
abstract
=
"false"
lazy-init
=
"default"
autowire
=
"default"
-
dependency-check
=
"default"
>
-
<
property
name
=
"sessionFactory"
>
-
<
ref
bean
=
"sessionFactory"
/>
-
</
property
>
-
</
bean
>
-
<
tx:advice
id
=
"txAdvice"
transaction-manager
=
"transactionManager"
>
-
<
tx:attributes
>
-
<
tx:method
name
=
"add*"
propagation
=
"REQUIRED"
/>
-
<
tx:method
name
=
"delete*"
propagation
=
"REQUIRED"
/>
-
<
tx:method
name
=
"update*"
propagation
=
"REQUIRED"
/>
-
<
tx:method
name
=
"add*"
propagation
=
"REQUIRED"
/>
-
<!-- <tx:method name="*" propagation="true" />-->
-
</
tx:attributes
>
-
-
</
tx:advice
>
-
-
<
aop
:config
>
-
<
aop
:pointcut
id
=
"allManagerMethod"
-
expression_r
=
"execution(* com.service.*.*(..))"
/>
-
<
aop
:advisor
advice-ref
=
"txAdvice"
-
pointcut-ref
=
"allManagerMethod"
/>
-
</
aop
:config
>
-
</
beans
>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop
="http://www.springframework.org/schema/aop
"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring
-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring
-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop
/spring
-aop
.xsd "
>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
abstract="false" lazy-init="default"
dependency-check="default">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<!-- <tx:method name="*" propagation="true" />-->
</tx:attributes>
</tx:advice>
<aop
:config>
<aop
:pointcut id="allManagerMethod"
expression_r="execution(* com.service.*.*(..))" />
<aop
:advisor advice-ref="txAdvice"
pointcut-ref="allManagerMethod" />
</aop
:config>
</beans>
Eclipse不能识别<tx:advice/>标签
在开发Spring
的过程中,有时会出现Eclipse不能识别<tx:advice/>标签。
提示出现以下错误:
The prefix "tx" for element "tx:advice" is not bound
这个错误的原因很简单是:
我们在定义申明AOP
的时候。。没有加载schema。
具体表现如下:
Xml代码
-
<
beans
>
-
-
<
tx:advice
id
=
"txAdvice"
transaction-manager
=
"transactionManager"
>
-
<
tx:attributes
>
-
<
tx:method
name
=
"get*"
read-only
=
"true"
/>
-
<
tx:method
name
=
"*"
propagation
=
"REQUIRES_NEW"
rollback-for
=
"Exception"
/>
-
</
tx:attributes
>
-
</
tx:advice
>
-
-
<!--
aop
代理设置-->
-
<
aop
:config
proxy-target-class
=
"true"
>
-
....
-
-
</
aop
:config
>
-
-
</
beans
>
<beans>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="*" propagation="REQUIRES_NEW" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
<!-- aop
代理设置-->
<aop
:config proxy-target-class="true">
....
</aop
:config>
</beans>
这时会抛出异常不认<TX>标签。。起先还以为是没有加载JAR包呢。。
后来读AOP
文档才发现<beans>中要加入“xmlns:aop
”的命名申明,并在“xsi:schemaLocation”中指定aop
配置的schema的地址
配置文件如下:
Xml代码
-
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
-
<
beans
xmlns
=
"http://www.springframework.org/schema/beans "
-
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance "
-
xmlns:
aop
=
"http://www.springframework.org/schema/
aop
"
-
xmlns:tx
=
"http://www.springframework.org/schema/tx "
-
xsi:schemaLocation
="http://www.springframework.org/schema/beans
-
http://www.springframework.org/schema/beans/spring
-beans.xsd
-
http://www.springframework.org/schema/tx
-
http://www.springframework.org/schema/tx/spring
-tx.xsd
-
http://www.springframework.org/schema/aop
-
http://www.springframework.org/schema/aop
/spring
-aop
.xsd "
>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans "
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
xmlns:aop
="http://www.springframework.org/schema/aop
"
xmlns:tx="http://www.springframework.org/schema/tx "
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring
-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring
-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop
/spring
-aop
.xsd ">
这些才是最关键的地方。。后面的配置不变。。。。
Spring
使用
<tx:advice>和
<aop
:config>
用来配置事务,具体如何配置你可以参考Spring
文档。
我解释一下(* com.evan.crm.service.*.*(..))中几个通配符的含义:
|第一个 * —— 通配 任意返回值类型|
|第二个 * —— 通配 包com.evan.crm.service下的任意class|
|第三个 * —— 通配 包com.evan.crm.service下的任意class的任意方法|
|第四个 .. —— 通配 方法可以有0个或多个参数|
综上:包com.evan.crm.service下的任意class的具有任意返回值类型、任意数目参数和任意名称的方法
<tx:advice/> 有关的设置
这一节里将描述通过 <tx:advice/>
标签来指定不同的事务性设置。默认的 <tx:advice/>
设置如下:
事务传播设置是 REQUIRED
隔离级别是 DEFAULT
事务是 读/写
事务超时默认是依赖于事务系统的,或者事务超时没有被支持。
任何 RuntimeException 将触发事务回滚,但是任何 checked Exception 将不触发事务回滚
这些默认的设置当然也是可以被改变的。 <tx:advice/> 和
<tx:attributes/> 标签里的
<tx:method/> 各种属性设置总结如下:
表 9.1. <tx:method/> 有关的设置
属性 |
是否需要? |
默认值 |
描述 |
name |
是 |
|
与事务属性关联的方法名。通配符(*)可以用来指定一批关联到相同的事务属性的方法。
如:'get*'、'handle*'、'on*Event'等等。 |
propagation |
不 |
REQUIRED |
事务传播行为 |
isolation |
不 |
DEFAULT |
事务隔离级别 |
timeout |
不 |
-1 |
事务超时的时间(以秒为单位) |
read-only |
不 |
false |
事务是否只读? |
rollback-for |
不 |
|
将被触发进行回滚的 Exception(s);以逗号分开。
如:'com.foo.MyBusinessException,ServletException' |
no-rollback-for
|
不 |
|
不 被触发进行回滚的 Exception(s);以逗号分开。
如:'com.foo.MyBusinessException |
分享到:
相关推荐
tx:advice和aop config的配置全部注释掉。 其余和切面、通知有关的配置都注释掉,或者删掉这个属性值引用前面定义的transactionManager bean添加保留 其余和切面、通知有关的配置都注释掉,或者删掉 这个属性值引用...
advice-ref="noTxAdvice" /> </aop:config> <tx:advice id="defaultTxAdvice"> <tx:attributes> <tx:method name="get*" read-only="true" /> <tx:method name="*" /> </tx:attributes> </tx...
Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,...
<description>Spring公共配置文件 <!-- mes 的數據庫 --> <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/> <property name="jdbcUrl" value="jdbc:oracle:thin:@10.142.252.132:...
--aop面向切面编程,切面就是切入点和通知的组合--> <!--配置事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!--配置事务的通知...
-- Spring AOP config配置切点 --> <aop:config> <aop:pointcut expression="execution(* com.org.service.*.*(..))" id="bussinessService" /> <aop:advisor advice-ref="txAdvice" pointcut-ref=...
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <value>classpath:/deploy.properties <!-- 配置sessionFactory ...
加入spring和aop所需必须包 加入hibernate的必须包 spring整合hibernate的必须包 org.springframework.jdbc-3.1.3.RELEASE.jar org.springframework.orm-3.1.3.RELEASE.jar org.springframework.transaction-3.1.3....
-- Spring AOP config配置切点 --> <aop:config> <aop:pointcut expression="execution(public * com.org.service.*.*(..))" id="bussinessService" /> <aop:advisor advice-ref="txAdvice" pointcut-ref=...
-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 添加 mybatis-config配置上去。--> ...
-- Spring AOP config配置切点 --> <aop:config> <aop:pointcut expression="execution(public * com.org.core.service.*.*(..))" id="bussinessService" /> <aop:advisor advice-ref="txAdvice" pointcut-...
</tx:advice> //tx标签代表时间传播 <aop:config>//切入 <aop:pointcut id="allServiceMethod" expression="execution(* com.cstp.service.*.*(..))"/> <aop:advisor pointcut-ref="allServiceMethod" ...
-- JTA环境的事务配置 <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager or WebLogicJtaTransactionManager"/> --> <!-- 使用annotation定义事务 --> <tx:...