<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); } }
相关推荐
<tx:annotation-driven transaction-manager="transactionManager"/> </beans> ``` 2. `spring-web.xml` 用于配置SpringMVC的细节,如视图解析器、拦截器等。例如: ```xml <beans xmlns=...
<tx:annotation-driven transaction-manager="transactionManager"/> <!-- 扫描特定包下的Service和Repository类 --> <context:component-scan base-package="com.example.service,com.example.repository"/> ...
52. <tx:annotation-driven mode="aspectj"/> 53. 54. <aop:aspectj-autoproxy/> 55.</beans> hibernate.properties数据库连接配置 [java] view plaincopy 01.dataSource.password=123 02....
<tx:annotation-driven transaction-manager="transactionManager" /> <!-- 配置扫描包 --> <context:component-scan base-package="com.example.demo" /> </beans> ``` - **数据源配置**:使用C3P0连接池。 - ...
<tx:annotation-driven transaction-manager="transactionManager"/> <!-- 扫描指定包下的Service组件 --> <context:component-scan base-package="com.example.service"/> <!-- 配置mapper接口扫描 --> ...
- 通过`<aop:config>`和`<tx:annotation-driven>`可以配置AOP代理和基于注解的事务管理。 总的来说,Spring MVC通过XML配置或注解方式,使得开发者能够灵活地组织和配置应用程序的各个组件,包括控制器、模型对象...
<tx:annotation-driven transaction-manager="txManager" /> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref=...
<tx:annotation-driven transaction-manager="transactionManager" /> <!-- 启用 MyBatis 的自动扫描 --> <context:component-scan base-package="com.example.mapper" /> ``` ##### 2.3、整合SpringMVC SpringMVC...
最后,通过`<tx:annotation-driven>`启用基于注解的事务管理,指定事务管理器为之前配置的`transactionManager`。这样,我们就可以在Service层的方法上添加`@Transactional`注解来开启事务。 例如,一个简单的...
Spring MVC支持声明式事务管理,这可以在`<tx:annotation-driven>`标签中配置,使得@Transactional注解能驱动事务处理: ```xml <tx:annotation-driven transaction-manager="transactionManager"/> ``` 其中,...
<tx:annotation-driven transaction-manager="transactionManager"/> </beans> ``` #### 三、总结 通过以上步骤,我们成功地搭建了一个集成了JSF、Spring和Hibernate的技术栈环境。这样的架构不仅能够满足复杂的...
<tx:annotation-driven transaction-manager="transactionManager"/> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory...
配置了 <tx:annotation-driven/>,就必定有对应的标签解析器类,查看 NamespaceHandler 接口的实现类,可以看到一个 TxNamespaceHandler,它注册了 AnnotationDrivenBeanDefinitionParser 对 annotation-driven 元素...
在事务管理方面,`tx.xsd`提供了配置事务策略的元素,如`<tx:annotation-driven>`,它可以自动检测并处理具有特定注解的方法的事务边界。 还有,`jdbc.xsd`和`jms.xsd`分别处理数据库和消息队列的相关配置。`jdbc....
- `<tx:annotation-driven>`: 开启基于注解的事务管理。 - `<tx:jta-transaction-manager>`: 配置JTA事务管理器。 #### 六、Maven依赖 在项目中使用SSM框架时,通常会通过Maven管理项目依赖。添加相关依赖可以在`...
`mvc.dtd`是Spring MVC模块的DTD文件,提供了如`<mvc:annotation-driven>`、`<mvc:view-controller>`等元素,用于声明式地配置控制器、视图解析等。 `oxm.dtd`涉及对象/XML映射(Object/XML Mapping),如JAXB或...
这里指定了事务管理器的Bean ID为`txManager`,并使用`<tx:annotation-driven>`元素开启基于注解的事务管理。 ##### 3. 定义事务切面 为了更细粒度地控制事务的行为,可以定义一个事务切面,并设置不同的事务传播...
<tx:annotation-driven transaction-manager="transactionManager" /> ``` #### 七、配置MyBatis 1. **创建MyBatis配置文件**: - 在`src/main/resources/config`目录下创建一个名为`mybatis-config.xml`的文件...
<tx:annotation-driven transaction-manager="transactionManager"/> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ...
在Spring的XML配置文件中,事务管理通常在`<tx:annotation-driven/>`或`<tx:advice/>`标签中进行配置。`<tx:annotation-driven>`是根据注解(如@Transactional)来驱动事务,而`<tx:advice>`则允许我们自定义事务...