`

<tx:annotation-driven /> 标签解析

 
阅读更多

 <tx:annotation-driven /> 开启对@Transaction 注解事物支持由TxNamespaceHandler负责解析

主要代码如下

public static void configureAutoProxyCreator(Element element, ParserContext parserContext) {
//AnnotationAwareAspectJAutoProxyCreator

			
AopNamespaceUtils.registerAutoProxyCreatorIfNecessary(parserContext, element);

			String txAdvisorBeanName = TransactionManagementConfigUtils.TRANSACTION_ADVISOR_BEAN_NAME;
			if (!parserContext.getRegistry().containsBeanDefinition(txAdvisorBeanName)) {
				Object eleSource = parserContext.extractSource(element);

				//负责解析@Transaction注解获取事物属性
				RootBeanDefinition sourceDef = new RootBeanDefinition(AnnotationTransactionAttributeSource.class);
				sourceDef.setSource(eleSource);
				sourceDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
				String sourceName = parserContext.getReaderContext().registerWithGeneratedName(sourceDef);

				// 事物拦截器,负责事物开启关闭等动作
				RootBeanDefinition interceptorDef = new RootBeanDefinition(TransactionInterceptor.class);
				interceptorDef.setSource(eleSource);
				interceptorDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
				registerTransactionManager(element, interceptorDef);
				interceptorDef.getPropertyValues().add("transactionAttributeSource", new RuntimeBeanReference(sourceName));
				String interceptorName = parserContext.getReaderContext().registerWithGeneratedName(interceptorDef);

				// Create the TransactionAttributeSourceAdvisor definition.
				RootBeanDefinition advisorDef = new RootBeanDefinition(BeanFactoryTransactionAttributeSourceAdvisor.class);
				advisorDef.setSource(eleSource);
				advisorDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
				advisorDef.getPropertyValues().add("transactionAttributeSource", new RuntimeBeanReference(sourceName));
				advisorDef.getPropertyValues().add("adviceBeanName", interceptorName);
				if (element.hasAttribute("order")) {
					advisorDef.getPropertyValues().add("order", element.getAttribute("order"));
				}
				parserContext.getRegistry().registerBeanDefinition(txAdvisorBeanName, advisorDef);

				CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(element.getTagName(), eleSource);
				compositeDef.addNestedComponent(new BeanComponentDefinition(sourceDef, sourceName));
				compositeDef.addNestedComponent(new BeanComponentDefinition(interceptorDef, interceptorName));
				compositeDef.addNestedComponent(new BeanComponentDefinition(advisorDef, txAdvisorBeanName));
				parserContext.registerComponent(compositeDef);
			}
		}

 

分享到:
评论

相关推荐

    非maven-SSM (下) springMVC部分 手牵手操作.实在不能再详细了 多次测试

    &lt;tx:annotation-driven transaction-manager="transactionManager"/&gt; &lt;/beans&gt; ``` 2. `spring-web.xml` 用于配置SpringMVC的细节,如视图解析器、拦截器等。例如: ```xml &lt;beans xmlns=...

    spring mvc基础

    &lt;tx:annotation-driven transaction-manager="transactionManager"/&gt; &lt;!-- 扫描特定包下的Service和Repository类 --&gt; &lt;context:component-scan base-package="com.example.service,com.example.repository"/&gt; ...

    spring_MVC源码

    52. &lt;tx:annotation-driven mode="aspectj"/&gt; 53. 54. &lt;aop:aspectj-autoproxy/&gt; 55.&lt;/beans&gt; hibernate.properties数据库连接配置 [java] view plaincopy 01.dataSource.password=123 02....

    IDEASSM框架实战CRUDSSM整合配置MyBatis逆向工程.docx

    &lt;tx:annotation-driven transaction-manager="transactionManager" /&gt; &lt;!-- 配置扫描包 --&gt; &lt;context:component-scan base-package="com.example.demo" /&gt; &lt;/beans&gt; ``` - **数据源配置**:使用C3P0连接池。 - ...

    java整合SSM框架

    &lt;tx:annotation-driven transaction-manager="transactionManager"/&gt; &lt;!-- 扫描指定包下的Service组件 --&gt; &lt;context:component-scan base-package="com.example.service"/&gt; &lt;!-- 配置mapper接口扫描 --&gt; ...

    spring mvc

    - 通过`&lt;aop:config&gt;`和`&lt;tx:annotation-driven&gt;`可以配置AOP代理和基于注解的事务管理。 总的来说,Spring MVC通过XML配置或注解方式,使得开发者能够灵活地组织和配置应用程序的各个组件,包括控制器、模型对象...

    集成springmvc spring hibernate的配置

    &lt;tx:annotation-driven transaction-manager="txManager" /&gt; &lt;bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt; &lt;property name="sessionFactory" ref=...

    SSM三大框架的整合.docx

    &lt;tx:annotation-driven transaction-manager="transactionManager" /&gt; &lt;!-- 启用 MyBatis 的自动扫描 --&gt; &lt;context:component-scan base-package="com.example.mapper" /&gt; ``` ##### 2.3、整合SpringMVC SpringMVC...

    JSP 中spring事务配置详解.docx

    最后,通过`&lt;tx:annotation-driven&gt;`启用基于注解的事务管理,指定事务管理器为之前配置的`transactionManager`。这样,我们就可以在Service层的方法上添加`@Transactional`注解来开启事务。 例如,一个简单的...

    SpringMVC核心配置文件示例.rar

    Spring MVC支持声明式事务管理,这可以在`&lt;tx:annotation-driven&gt;`标签中配置,使得@Transactional注解能驱动事务处理: ```xml &lt;tx:annotation-driven transaction-manager="transactionManager"/&gt; ``` 其中,...

    JSF+Spring+Hibernate

    &lt;tx:annotation-driven transaction-manager="transactionManager"/&gt; &lt;/beans&gt; ``` #### 三、总结 通过以上步骤,我们成功地搭建了一个集成了JSF、Spring和Hibernate的技术栈环境。这样的架构不仅能够满足复杂的...

    Struts1.x Spring2.x Hibernate3.x DWR2.x整合工具文档v1.00

    &lt;tx:annotation-driven transaction-manager="transactionManager"/&gt; &lt;bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt; &lt;property name="sessionFactory...

    Spring源码学习十二:@Transactional是如何工作的1

    配置了 &lt;tx:annotation-driven/&gt;,就必定有对应的标签解析器类,查看 NamespaceHandler 接口的实现类,可以看到一个 TxNamespaceHandler,它注册了 AnnotationDrivenBeanDefinitionParser 对 annotation-driven 元素...

    spring3.0的xsd文件.rar

    在事务管理方面,`tx.xsd`提供了配置事务策略的元素,如`&lt;tx:annotation-driven&gt;`,它可以自动检测并处理具有特定注解的方法的事务边界。 还有,`jdbc.xsd`和`jms.xsd`分别处理数据库和消息队列的相关配置。`jdbc....

    SSM框架笔记

    - `&lt;tx:annotation-driven&gt;`: 开启基于注解的事务管理。 - `&lt;tx:jta-transaction-manager&gt;`: 配置JTA事务管理器。 #### 六、Maven依赖 在项目中使用SSM框架时,通常会通过Maven管理项目依赖。添加相关依赖可以在`...

    Spring基础包的dtd(aop,jdbc,jee,jms,lang,mvc,oxm)等

    `mvc.dtd`是Spring MVC模块的DTD文件,提供了如`&lt;mvc:annotation-driven&gt;`、`&lt;mvc:view-controller&gt;`等元素,用于声明式地配置控制器、视图解析等。 `oxm.dtd`涉及对象/XML映射(Object/XML Mapping),如JAXB或...

    Spring3配置声明式事务

    这里指定了事务管理器的Bean ID为`txManager`,并使用`&lt;tx:annotation-driven&gt;`元素开启基于注解的事务管理。 ##### 3. 定义事务切面 为了更细粒度地控制事务的行为,可以定义一个事务切面,并设置不同的事务传播...

    SSM框架搭建步骤

    &lt;tx:annotation-driven transaction-manager="transactionManager" /&gt; ``` #### 七、配置MyBatis 1. **创建MyBatis配置文件**: - 在`src/main/resources/config`目录下创建一个名为`mybatis-config.xml`的文件...

    ssm项目配置文件(spring,mybatis,springmvc)

    &lt;tx:annotation-driven transaction-manager="transactionManager"/&gt; &lt;bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt; &lt;property name="dataSource" ...

    SpringXMLTransaction

    在Spring的XML配置文件中,事务管理通常在`&lt;tx:annotation-driven/&gt;`或`&lt;tx:advice/&gt;`标签中进行配置。`&lt;tx:annotation-driven&gt;`是根据注解(如@Transactional)来驱动事务,而`&lt;tx:advice&gt;`则允许我们自定义事务...

Global site tag (gtag.js) - Google Analytics