- 浏览: 252942 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
liuweihug:
这个博客不错。都是干货。Jquery+asp.net 后台数据 ...
jquery ajax 中文乱码 -
龙晓舟:
博主真不错!请问,德比的酒店系统有单体店的吗?支持多语言吗?那 ...
我的作品 -
勒布朗-小明:
抽象工厂模式 的例子在哪呢??
Java工厂模式 factory -
llpuya:
hh
Java工厂模式 factory -
phpxiaoxin:
yuhe 写道git init --bare 执行不成功呢?错 ...
git at redhat5
今天做两个项目的集成,主项目单独跑没问题,子项目单独跑没问题,集成到一起就挂了。报错信息为:
PropertyAccessException 1: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy121] to required type [com.**.facilities.group.service.BaseFacilitiesGroupService] for property 'baseFacilitiesGroupService'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy121] to required type [com.**.facilities.group.service.BaseFacilitiesGroupService] for property 'baseFacilitiesGroupService': no matching editors or conversion strategy found org.springframework.beans.factory.BeanCreationException: Error creating bean wit h name 'baseFacilitiesGroupForVoService' defined in ServletContext resource [/WE B-INF/classes/spring/facilities.xml]: Cannot resolve reference to bea n 'baseFacilitiesService' while setting bean property 'baseFacilitiesService'; n ested exception is org.springframework.beans.factory.BeanCreationException: Erro r creating bean with name 'baseFacilitiesService' defined in ServletContext reso urce [/WEB-INF/classes/spring/facilities.xml]: Cannot resolve referen ce to bean 'baseFacilitiesServiceTarget' while setting bean property 'target'; n ested exception is org.springframework.beans.factory.BeanCreationException: Erro r creating bean with name 'baseFacilitiesServiceTarget' defined in ServletContex t resource [/WEB-INF/spring/facilities.xml]: Error setting pr operty values; nested exception is org.springframework.beans.PropertyBatchUpdate Exception; nested PropertyAccessExceptions (1) are:
从报错信息来看,是类注入的时候,类型不匹配。再看一下,service是经过了一层事务代理的。看了一下两个项目的配置,完全没有问题。配置文件如下:
<bean id="baseFacilitiesGroupService" parent="baseTransactionProxy"> <property name="target" ref="baseFacilitiesGroupServiceTarget"/> </bean> <bean id="baseFacilitiesGroupServiceTarget" class="com.**.BaseFacilitiesGroupService"> <property name="baseFacilitiesGroupDao" ref="baseFacilitiesGroupDao"/> </bean> <!--事务管理代理--> <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"> <property name="transactionManager" ref="transactionManager" /> <property name="proxyTargetClass"> <value>true</value> </property> <property name="transactionAttributes"> <props> <!--<prop key="**">PROPAGATION_REQUIRED,-Exception</prop> --> <prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop> </props> </property> </bean>
从网上搜索错误说proxyTargetClass需要配置为true,我们也配置了。
参考:http://blog.chinaunix.net/u/20045/showart_1019030.html
后来听说主项目没有使用我们的配置方法。而是使用了:
<bean id="chainService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager"/> </property> <property name="target"> <ref bean="chainServiceTarget"/> </property> <property name="transactionAttributes"> <props> <prop key="create*"> PROPAGATION_REQUIRED, ISOLATION_READ_COMMITTED </prop> </property> </bean>
根据这种方式修改后,还是不work,后来想到,感觉是不是应该吧proxyTargetClass=true也配置上,加上之后,果然work了。
<bean id="chainService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="proxyTargetClass"> <value>true</value> </property> <property name="transactionManager"> <ref bean="transactionManager"/> </property> <property name="target"> <ref bean="chainServiceTarget"/> </property> <property name="transactionAttributes"> <props> <prop key="create*"> PROPAGATION_REQUIRED, ISOLATION_READ_COMMITTED </prop> </props> </property> </bean>
再后来看到了如下的文章:ProxyFactoryBean什么时候需要配置 proxyTargetClass
说是spring动态代理使用cglib的时候会通过类所实现的接口动态代理生成类。这下去看那个报错的类,他实现了接口,但是其他地方使用的时候却是直接使用了这个类。所以动态代理生成的类,是会产生类型不匹配的问题。所以问题找到。
但是仍然有遗留的问题:
1.为什么子项目单独是可以运行的?
2.为什么我们最后配置完之后,其实就是将parent取掉,然后把代理的配置移到了本身上面,这两种方式我认为是没有区别的。为啥一个可以work,一个不行。
有谁可以解答一下,谢谢。
评论
2 楼
phpxiaoxin
2011-01-23
z.raul 写道
建议楼主单独运行一下主项目,估计主项目的配置就是错误的。大项目使用代理要小心。
不错,前几天发现问题了,主项目中,有人配置了一个id一摸一样的baseTransactionProxy
而且运行debug发现spring使用的不是我们想想中的那个id。
而那个多出来的配置的事务也有问题。
1 楼
z.raul
2011-01-22
建议楼主单独运行一下主项目,估计主项目的配置就是错误的。大项目使用代理要小心。
发表评论
-
关于ThreadLocal
2012-12-31 18:45 1182关于ThreadLocal 文章介绍了ThreadLo ... -
java 关于内存溢出的相关知识
2012-12-27 16:31 1246http://developer.51cto.c ... -
一次webservice的旅行
2012-12-25 16:19 0最近我们有这样一个需求,就是发布一个与别人一模一样的webse ... -
scala 相关内容整理
2012-07-11 21:18 1461首先是scala 的环境搭建 :鉴客 搭建基于 IDEA 的 ... -
Hibernate DetachedCriteria 一对多查询
2011-05-31 10:50 2874DetachedCriteria detachedCrit ... -
cxf spring 发布 webservice 供 .net使用
2010-12-31 21:23 2503cxf 是 xfire 的替代工具 ... -
spring事务无异常回滚 [spring rollback without exception]
2010-12-13 16:54 2401在使用spring的时候通常我们可以通过抛出异常的方式完成回滚 ... -
都是spring若的祸-spring从使用到原理
2010-06-07 10:46 0spring2.5中文文档 http://arro ... -
从ant到maven -- maven pom例子(初级)
2010-04-20 14:31 7490最近将项目从ant改成了maven,改的过程中,遇到一些问题, ... -
MAVEN2实用指南, maven2权威指南中英
2010-04-06 11:06 2113maven2权威指南中英 :http://xizhenyin. ... -
Java 回调(callback) 内部类(innerclass)
2009-12-22 21:01 1617/** * 动物 */ public class A ... -
Struts2
2009-11-03 17:30 1379struts2 中 OGNL表达式的使用 http ... -
HttpInvoker 远程调用
2009-10-20 19:35 1938HttpInvoker 远程调用实例 http://www. ... -
java 基础概念知识
2009-10-20 14:55 1869java 泛型 http://baike.baidu.com ... -
spring BeanFactory 实现类的getBean方法
2009-10-10 10:59 3139原文:http://blog.163.com/ka ... -
连接池
2009-09-09 22:35 1706转自http://baike.baidu.com/view/1 ... -
java 面试基础
2009-09-08 11:04 1205ArrayList LinkedList 的区 ... -
guice:Guice和Spring框架的区别
2009-09-02 17:55 1511转自:http://www.crazycoder.cn/ :h ... -
第一次java web面试总结
2009-07-31 13:12 4543公司为某大公司济南的 ... -
关于tomcate配置的一些东西
2009-07-13 10:51 1342乱码问题,这里说的是url乱码的解决方式可以通过配置tomca ...
相关推荐
然而,如果需要更精细的控制,可以通过`@EnableAspectJAutoProxy`注解开启基于AspectJ的自动代理支持,或者通过`proxyTargetClass`属性来强制使用CGLIB代理。 总结一下,Spring的AOP机制通过JDK动态代理和CGLIB动态...
### Spring的动态代理详解 #### 引言 在软件工程领域,代理模式是一种常见的设计模式,主要用于增强对象的功能,而不改变其原有的结构。Spring框架利用动态代理技术为Bean提供了横切关注点(如事务管理、日志记录...
Spring AOP允许我们通过代理来实现横切关注点,如日志、事务管理等,而JDK动态代理则是Spring AOP实现的一种方式。本文将深入探讨Spring如何利用JDK动态代理技术来实现这一功能,并通过实例解析其底层实现。 首先,...
可以通过配置`proxyTargetClass="true"`来强制使用CGLIB。 4. **代理对象的获取**:通常,Spring容器会自动创建并管理代理对象。在需要调用目标方法的地方,使用Spring注入的bean,实际上就是在操作代理对象。 综...
Java动态代理是Java提供的一种在运行时创建代理对象的技术,它是通过实现InvocationHandler接口和使用Proxy类来实现的。在Spring框架中,AOP(面向切面编程)就是基于Java动态代理来完成的,用于实现横切关注点,如...
- target/classes:编译后的class文件,包括目标接口和实现类的class文件,以及由Proxy生成的代理类class文件 - 测试代码:展示如何使用Proxy创建代理对象并调用方法 2. CGLib代理项目: - src/main/java:包含...
在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。Proxy类是用于创建一个代理对象,而InvocationHandler接口则定义了代理对象调用方法时的行为。 1. **...
Spring内部通过`java.lang.reflect.Proxy`类来创建动态代理对象。为了创建一个代理对象,开发者需要实现`InvocationHandler`接口,并重写`invoke`方法。该方法会在代理对象调用被代理方法时被触发。下面是一个简单的...
3. **调整代理模式**:对于CGLIB代理,可以在配置中设置`proxyTargetClass=true`,强制Spring使用CGLIB,即使目标类实现了接口。由于CGLIB创建的是目标类的子类,所以不会导致循环依赖。但是,这可能会引入额外的...
- `unwrapIfNecessary(Object proxy, Class<?> requiredType)`:这个方法会检查代理对象是否需要被解包,如果`proxy`的类型与`requiredType`匹配,那么它就直接返回`proxy`;否则,它会调用`getTarget(proxy)`来获取...
Spring支持两种主要的动态代理方式:Java Proxy和cglib。这两种方法都可以用来增强或拦截目标对象的方法调用,实现如AOP(面向切面编程)的功能。 首先,我们来看Java Proxy。Java Proxy是Java内置的动态代理机制,...
在本案例中,我们将探讨如何实现一个动态代理接口并将其注册到Spring容器,以便于通过@Autowired注解或其他方式在Spring应用中使用。 首先,我们需要定义一个接口,例如`MyService`,这个接口包含了我们需要代理的...
在Spring AOP中,当目标对象实现了至少一个接口时,Spring会使用JDK的动态代理来创建代理对象。这是因为JDK的动态代理只适用于实现了接口的类,它通过生成一个与目标类接口相同的新类来实现代理。这个新类在运行时被...
标题"Spring_0300_JDKProxy"暗示我们将讨论Spring如何使用JDK的Proxy类来实现动态代理。在Spring中,`org.springframework.aop.framework.ProxyFactoryBean`或`org.springframework.aop.framework.ProxyFactory`可以...
总结来说,"spring-demo16-JDK动态代理.zip"可能是一个包含Spring AOP与JDK动态代理结合使用的示例项目,展示了如何通过动态代理在运行时增强对象的行为。这个例子可以帮助开发者理解如何在实际应用中利用JDK动态...
代理(Proxy)是指客户端通过一个中间服务器间接访问目标服务器,而反向代理(Reverse Proxy)则是指客户端看似直接与服务器交互,但实际上请求被转发给了另一个服务器。在Spring Boot中,我们可以利用`ProxyServlet...
Spring框架是Java中实现AOP的一个流行工具,它通过动态代理机制实现了这一功能。本文将深入探讨Spring AOP的实现原理,以及如何使用反射来实现动态代理模式。 首先,我们需要了解AOP的基本概念。AOP的核心思想是切...
我们模拟Spring CGLIB代理的方式,通过Enhancer来创建TargetClass的代理实例。我们定义了一个MethodInterceptor,在该拦截器中,在目标方法调用前后输出了信息,并且调用了目标方法的代理实现。 需要注意的是,上述...
在Spring框架中,动态代理是一种常见且强大的技术,它允许我们在运行时创建对象的代理,以便在调用方法时添加额外的功能,如日志、事务管理、缓存等。本篇将深入探讨如何通过动态代理将对象注册到Spring容器,并实现...
然后,在Spring配置文件中启用CGLIB代理,可以设置`proxy-target-class="true"`属性: ```xml <aop:config proxy-target-class="true"> <!-- 配置切面 --> ... ``` 接下来,创建一个需要代理的目标类,例如`...