转自 http://www.sunxin.org
在使用Spring自动代理配置事务时,要配置TransactionAttributeSourceAdvisor(自动代理只能用于Advisor),该类需要一个事务拦截器(TransactionInterceptor)的引用。TransactionAttributeSourceAdvisor类提供了两种方式注入TransactionInterceptor对象,一种是通过构造器注入,一种是通过setter注入。当采用构造器注入时,运行良好;当采用setter注入时,则会抛出下列异常:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionAttributeSourceAdvisor' defined in class path resource [beans.xml]: Instantiation of bean failed; nested exception is java.lang.NullPointerException
Caused by: java.lang.NullPointerException
at org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor$TransactionAttributeSourcePointcut.getTransactionAttributeSource(TransactionAttributeSourceAdvisor.java:102)
at org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor$TransactionAttributeSourcePointcut.hashCode(TransactionAttributeSourceAdvisor.java:121)
at java.lang.Object.toString(Object.java:209)
at java.lang.String.valueOf(String.java:2577)
分享到:
相关推荐
在深入探讨Spring事务代理配置之前,我们先简要回顾一下Spring...通过以上步骤,我们就可以在Spring中成功配置事务代理,使得应用程序中的业务方法能够自动进行事务管理,极大地提高了代码的可维护性和事务的一致性。
本文将深入探讨如何在Spring框架中使用`TransactionProxyFactoryBean`来实现声明式事务代理配置。 #### 声明式事务管理概述 声明式事务管理通过在配置文件或注解中定义事务边界,而不是在业务代码中显式地管理事务...
Spring 会自动创建基于接口的代理,这样就可以在调用接口方法时触发事务管理。 第四种方式:基于类的代理 这种方式适用于不使用接口的情况。在类上直接使用 @Transactional 注解,Spring 会创建基于类的代理,但是...
这里我们主要探讨的是"Spring基于XML方式配置事务",这涉及到Spring的事务管理器、事务属性以及如何在XML配置文件中定义这些元素。 首先,Spring的事务管理分为两种模式:编程式事务管理和声明式事务管理。编程式...
编程式事务管理需要在代码中显式调用开始、提交、回滚等事务操作,而声明式事务管理则通过在XML或注解中声明事务边界,让Spring自动进行事务管理。在大多数情况下,声明式事务管理更为推荐,因为它降低了代码的耦合...
5. **开启AOP注解自动代理**:通过`<aop:aspectj-autoproxy/>`启用AspectJ注解的支持。 6. **编写切面类**:定义一个切面类,并使用`@Aspect`注解标注。 7. **定义切入点和通知**:使用`@Pointcut`定义切入点,使用`...
为了克服上述问题,Spring 1.x引入了一种更推荐的方式,即通过基类来配置事务。你可以创建一个抽象的事务代理bean,如`baseTransactionProxy`,并在此处定义通用的事务属性。然后,你的业务bean可以继承这个基类,...
-- 配置事务规则 --> *">PROPAGATION_REQUIRED,readOnly *">PROPAGATION_REQUIRED *">PROPAGATION_REQUIRED *">PROPAGATION_REQUIRED,ROLLBACK_ON_EXCEPTION ``` 在这里,`transactionAttributes`...
围绕Poxy的动态代理能够自动的提交和回滚事务。 PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务...
声明式事务管理更为常见,它通过在服务层的方法上添加@Transactional注解,由Spring自动进行事务的开启、提交或回滚。配置文件中,我们需要定义DataSource、SessionFactory、HibernateTransactionManager等Bean,并...
-- 配置事务管理器 --> <!-- 配置事务属性 --> *">PROPAGATION_REQUIRED,readOnly <!-- 指向目标Bean --> ``` 这里的`transactionAttributes`属性用于定义事务的传播行为和读写模式。 2. **基于...
总的来说,Spring 自动代理配置通过 `DefaultAdvisorAutoProxyCreator` 和相关的 PointcutAdvisor 实现了对业务代码的透明增强。这使得我们可以灵活地插入横切关注点,提高代码的可维护性和可扩展性,而无需直接修改...
当调用代理方法时,Spring 会自动在方法的开始和结束处插入事务管理代码。配置示例如下: ```xml <bean id="userDao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <!-- ...
本文将详细介绍Spring配置事务的五种方法,每种方法都基于相同的基本组件:DataSource、TransactionManager以及代理机制。理解这些配置方式有助于更好地控制事务在应用程序中的行为。 1. **每个Bean都有一个代理** ...
通过在配置中启用AspectJ自动代理和事务注解支持,Spring会自动识别带有`@Transactional`的方法,并在运行时使用AspectJ织入事务处理代码。这种方式无需额外的代理配置,事务管理更加透明。 5. **使用...
这需要在pom.xml中引入AspectJ的编译和织入依赖,并在配置中启用AspectJ的自动代理。 5. **Spring Boot的自动配置**:在Spring Boot项目中,通过@EnableTransactionManagement和适当的依赖,Spring Boot能自动配置...
一、Spring自动代理简介 自动代理是Spring AOP的核心功能之一,它创建了一个代理对象来包装原始的bean。当调用代理对象的方法时,Spring会先执行一些预定义的行为(如切面),然后转发调用到实际的目标对象。这使得...
1. **定义事务配置**:在Spring配置文件中,我们需要配置事务管理器。通常,对于Spring JDBC或者Hibernate,我们会使用PlatformTransactionManager,如DataSourceTransactionManager。 ```xml ...
1. 创建Spring配置文件:在XML配置文件(如`applicationContext.xml`)中,我们需要配置事务管理器。这通常是一个`PlatformTransactionManager`的实现,如`DataSourceTransactionManager`,它基于JDBC来管理事务。 ...
`DefaultAdvisorAutoProxyCreator`是Spring AOP中用于自动创建代理的组件,它会寻找所有`Advisor`(包括事务增强`Advisor`),并将它们应用到相关的bean上。这样,我们可以通过定义`Pointcut`来决定哪些方法需要...