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 |
分享到:
相关推荐
在 Spring AOP 中,我们可以通过 `<tx:advice>` 元素来配置事务特性。该元素用于定义一个事务特性,包括事务的传播行为、回滚规则等。在上面的配置文件中,我们可以看到 `<tx:advice>` 元素用于定义一个名为 "sgis....
1. XML配置:在`<tx:advice>`元素中定义事务行为,然后通过`<aop:config>`或`<aop:aspect>`将事务行为应用到特定的bean或方法上。例如: ```xml <tx:advice id="transactionAdvice" transaction-manager=...
这段代码配置了一个事务管理器,并定义了一个事务顾问(`tx:advice`),该顾问指定了不同方法名前缀对应的不同事务传播行为。例如,所有以`save`开头的方法都将使用`REQUIRED`传播行为,这意味着如果当前存在事务,...
2. **TransactionManager**:事务管理器,负责事务的开启、提交或回滚等操作。 3. **代理机制**:用于创建代理对象,实现事务的拦截和控制。 这些组成部分构成了Spring事务配置的基础,不同的数据访问方式可能会...
通过`<tx:advice>`和`<aop:config>`标签,可以定义事务切面并应用到特定的bean或方法上。 ```xml <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="create...
在Spring的配置文件中,使用`<tx:advice>`和`<aop:config>`元素来定义事务策略和切面。 ```xml <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" ...
- XML配置:如上所示,通过`<tx:advice>`和`<aop:config>`标签进行配置。 - @Transactional注解:在方法或类级别使用,声明方法属于哪个事务范围。 - AspectJ注解驱动:结合AspectJ,可以在编译时或加载时织入...
这种方式下,配置会包含一个`<aop:config>`和`<tx:advice>`标签,以及事务策略。例如: ```xml <aop:config> <aop:advisor advice-ref="transactionAdvice" pointcut-ref="serviceMethods"/> </aop:config> ...
本篇将详细讲解Spring AOP如何进行事务配置,包括注解和非注解两种方式。 1. **注解方式的事务管理** - **@Transactional**:这是Spring提供的核心注解,用于标记在一个方法或类上开启事务。当被注解的方法执行时...
2. **配置事务通知**:使用`<tx:advice>`元素定义事务行为,例如,以下配置表示所有标记为`@Transactional`的方法都在一个事务内执行: ```xml <tx:advice id="transactionAdvice" transaction-manager=...
实验 "Spring 声明事务" 是 Java 高级编程中的一个重要环节,旨在让学生掌握 Spring 框架中声明式事务管理的配置和使用。在实际应用中,事务管理是确保数据一致性、完整性和可靠性的关键组件。Spring 提供了声明式...
1. **配置事务管理器组件**:事务管理器是Spring中负责管理事务的核心组件。例如,`DataSourceTransactionManager`用于处理基于JDBC的数据源事务。在配置文件中,你需要创建一个`<bean>`,并注入数据源组件,如下所...
同时,可以使用`<tx:advice>`、`<aop:config>`等元素定义事务行为。 ```xml <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <aop:config> <aop:...
这篇博客将深入探讨Spring 2.0中的事务处理机制,以及如何通过`applicationContext.xml`配置文件来设置和管理事务。 首先,让我们理解什么是事务。事务是一组数据库操作,这些操作被视为一个单一的工作单元,要么...
总结一下,Spring的声明式事务管理通过AOP机制,使得开发者无需在业务代码中显式地开始和结束事务,而是通过配置决定哪些方法在事务中执行。这种方式极大地提高了代码的可读性和可维护性。在实际项目中,根据具体...
在`<tx:advice>`标签中定义事务行为,然后通过`<aop:config>`或`<aop:aspect>`配置切点,将事务行为应用到相应的服务方法上。 ```xml <tx:advice id="transactionAdvice" transaction-manager="transactionManager...
在Spring的配置文件中,通过`<tx:advice>`标签定义事务处理规则,然后使用`<aop:config>`或`<aop:aspectj-autoproxy>`标签将事务切面应用到目标方法上。例如: ```xml <tx:advice id="transactionAdvice" ...