- 浏览: 34438 次
- 性别:
- 来自: 北京
文章分类
最新评论
在学习 spring 过程中遇见了种种不同的异常错误,这里做了一下总结,希望遇见类似错误
的同学们共勉一下。
1. 错误一
Error creating bean with name 'helloServiceImpl' defined in class path resource [springservice.xml]: Error setting property values; nested exception is
org.springframework.beans.NotWritablePropertyException: Invalid property 'helloDao' of bean
class [www.csdn.spring.service.impl.HelloServiceImpl]: Bean property 'helloDao' is not writable
or has an invalid setter method. Does the parameter type of the setter match the return type of the
getter?
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property
'helloDao' of bean class
这类错误是:一般都是创建了一个 dao 的 spring 文件比如 spring-dao 有创建了一个 service 的
spring 文件,在 spring-service.xml 中引用 dao 的中定义的 id 名,导致的错误,疏忽是: 写
service 实现类的时候忘记了写对应 dao 的 setter 方法,即所谓的依赖注入
比如:
private HelloDao helloDao;
//set 依赖注入很重要,不写会报错,不能读写 helloDao 这一属性
publicvoid setHelloDao(HelloDao helloDao) {
System.out
.println("控制反转:应用程序本身不在负责创建 helloDao 对象,而是由 spring 容器负责创
建、管理、维护,这样控制权转移,称为反转。 "
+ "可以通过依赖注入方式注入该 HelloDao 对象");
this.helloDao = helloDao;
}
2. 错误二
Configuration problem: Failed to import bean definitions from relative location [springdao.xml]Offending resource: class path resource [spring.xml]; nested exception is
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 9 in XML
document from class path resource [spring-dao.xml] is invalid; nested exception is
org.xml.sax.SAXParseException: Open quote is expected for attribute "{1}" associated with an
element type "scope".
Caused by: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 9 in
XML document from class path resource [spring-dao.xml] is invalid; nested exception is
org.xml.sax.SAXParseException: Open quote is expected for
Caused by: org.xml.sax.SAXParseException: Open quote is expected for attribute "{1}"
associated with an element type "scope".
这种错误是马虎的错误,在对应的 spring 的配置文件中, bean 标签的 scope 属性忘了加引
号,在配置文件中国不会报错,但是在运行的时候就会出这样的错,一般导致错误的原因
是复制的时候疏忽了引号,直接将原来的引号覆盖了,导致了最后该属性没有引号。
<bean id="helloDaoImpl" class="www.csdn.spring.dao.impl.HelloDaoImpl"
scope="prototype"></bean>
错误的写成:
bean id="helloDaoImpl" class="www.csdn.spring.dao.impl.HelloDaoImpl"
scope=prototype></bean>
3. 错误三
No bean named 'helloServiceImp' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition
这种报错但是没有 Caused by 语句的错误一般都是使用的时候单词写错了,这里写错的地
方是在 java 类中,类中引用 id 的时候写错了单词;比如这里的错,注意下面的红色文字:
HelloService helloService2 = (HelloService)
context.getBean("helloServiceImp",HelloServiceImpl.class);
<bean id="helloServiceImpl" class="www.csdn.spring.service.impl.HelloServiceImpl" sco
pe="singleton" lazy-init="false">
<property name="helloDao" ref="helloDaoImpl"/>
</bean>
眼尖的哥们估计都看出来了这两个单词写的不一样,获取 bean 的方法中引用的 id 少写了
一个“i”,导致 spring 容器在读取的时候不能识别。以后注意细心就好。
4. 错误四
Error creating bean with name 'helloServiceImpl' defined in class path resource [springservice.xml]: Cannot resolve reference to bean 'helloDaoImp' while setting bean property
'helloDao'; nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named
'helloDaoImp' is defined
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named
'helloDaoImp' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition
这种也是单词写错的情况,与上面不同的是这种情况给出了 Caused by 语句,让你更清楚
错误发生的原因,英文还差不多的哥们或者有一定编程经验的人员一看 Caused by 语句就
应该能判断出什么错误;这里错误原因明显才、指出每一个名字为'helloDaoImp'的 bean,
或名字为'helloDaoImp'的 bean 未定义,这种错也好好找,一般都是互相引用的 spring 配置
文件马虎出的错,下面一个例子说明:比如 spring-service.xml 引用 spring-dao 的时候,还
是如上面说的一样,重点再红色字体
Service 配置文件中这么写:
<bean id="helloServiceImpl" class="www.csdn.spring.service.impl.HelloServiceImpl" sco
pe="singleton" lazy-init="false">
<property name="helloDao" ref="helloDaoImp"/>
</bean>
但是 dao 配置文件中却这么写:
bean id="helloDaoImpl" class="www.csdn.spring.dao.impl.HelloDaoImpl"
scope="prototype"></bean>
写到这大家就清楚了吧,与上一个错误基本上一样,都是单词写错的错误,只不过不同的
是上一个错误是在 java 类中引用 id 的时候写错单词出的错,而这一个错误是在 spring 配置
文件中国引用 id 出的错,万变不离其宗,错误的额原因都是单词写错,今后细心即可。
5. 错误五
Cannot find class [www.csdn.spring.dao.imp.HelloDaoImpl] for bean with name
'helloDaoImpl' defined in ServletContext resource [/WEB-INF/applicationContext.xml];
nested exception
isjava.lang.ClassNotFoundException:www.csdn.spring.dao.imp.HelloDaoImpl
Caused by: java.lang.ClassNotFoundException: www.csdn.spring.dao.HelloDaoImpl
错误原因:倒错包了,我的 web 项目 HelloDaoImpl 在 dao.impl 包下而不是 dao 包下。所
以包这样的错,看一下 spring 配置文具店额 classes 标签的值导入的类包名是否正确
6. 错误六
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating
bean with name 'employeeBean' defined in class path resource [spring-constructor.xml]:
Unsatisfied dependency expressed through constructor argument with index 2 of type
[double]: Ambiguous constructor argument types - did you specify the correct bean
references as constructor arguments?
错误原因: bean 实例类中的属性类型与 spring 配置文件中的构造器属性类型不对应所导
致,这种情况多出在使用类型指定构造器参数;比如:
类中属性如下,重点注意红色部分:
private String name;
private String sex;
private doublesalary;
spring 配置文件中的构造器标签
<constructor-arg type="java.lang.String" value="杨凯" />
<constructor-arg type="java.lang.String" value="男" />
<constructor-arg type=" java.lang.Double" value="5000.00" />
这种错误是因为构造器中的 type 属性不会自动对应拆箱装箱属性类型,简单点说就是类中
使用的是基本数据类型,配置文件中对应的 type 属性值就要是基本数据类型;类中使用的
是类类型,配置文件中对应的 type 属性值就要是包名加上类类型;
还有一种原因就是不对应的原因, constructor-arg 直接写错了,比如:
private doublesalary;对应了<constructor-arg type=" Double" value="5000.00" />
或者顺序不对的情况下回出现赋值错误,比如同时存在两个相同类型的属性, name 应该
为“杨凯”,如果 sex 在配置文件的位置与 name 的颠倒了,会出现 name=“男”的情况
7. 错误七
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'memberBean' defined in class path resource [spring-construtor.xml]: Initialization of bean failed;
nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to
convert property value of type 'java.lang.String' to required type
'www.csdn.spring.constructor.Member' for property 'member'; nested exception is
java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type
[www.csdn.spring.constructor.Member] for property 'member': no matching editors or conversion
strategy found
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert
property value of type 'java.lang.String' to required type 'www.csdn.spring.constructor.Member'
for property 'member'; nested exception is java.lang.IllegalStateException: Cannot convert value
of type [java.lang.String] to required type [www.csdn.spring.constructor.Member] for property
'member': no matching editors or conversion strategy found
错误原因:这种情况是一个 bean 实例引用另一个 bean 实例对象,而引用的那个 bean 实例
对象为空,但是在改 bean 实例的配置文件中又错误指明空值。举个例子说明:
<bean id="memberBean" class="www.csdn.spring.constructor.MemberBean">
<!-- value="null" 这里给 value 赋的是一个空字符串,而不是一个 null 空值 -->
<property name="name" value="null"/>
<property name="member">
<null/>
</property>
</bean>
关键看红色部分,红色部分是正确的写法,这样写引用空值对象才不会报错,但是如果你
像上面引用 nam 属性那样指明 value=“null”就会出现改错。
8. 错误八
错误一:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration
problem: Bean name 'deptBean' is already used in this <beans> element
Offending resource: class path resource [spring-byType.xml]
错误二:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with
name 'empBean' defined in class path resource [spring-byType.xml]: Unsatisfied dependency
expressed through bean property 'deptBean': : No qualifying bean of type
[www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but found 2:
deptBean,deptBean1; nested exception is
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of
type [www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but found
2: deptBean,deptBean1
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying
bean of type [www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but
found 2: deptBean,deptBean1
这两种错误原因:都是 spring 配置文件中自动装配按 byType 时出的问题,配置文件, 红色部
分为错误的解释和导致错误的原因如下:
<bean id="compBean" class="www.csdn.spring.autowire.CompBean">
<property name="name" value="DELL"/>
</bean>
<bean id="deptBean" class="www.csdn.spring.autowire.DeptBean">
<property name="name" value="销售部门"/>
</bean>
<!--
这里只能出现一个 deotBean,id 名不一样但是类型一样,都是 deptBean 实体的;
id="deptBean"或同类型的不同 id 都会抛异常
<bean id="deptBean1" class="www.csdn.spring.autowire.DeptBean">
<property name="name" value="销售部门"/>
</bean> -->
<!-- 使用 autoWrie 自动装配,改属性值 byType;
按类型自动装配,前提是同一个类型的只能有一个-->
<bean id="empBean" class="www.csdn.spring.autowire.EmpBean" autowire="byType">
<property name="name" value="杨凯"/>
<!-- <property name="comp" ref="compBean"/>
<property name="dept" ref="deptBean"/> -->
</bean>
9. 错误九
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with
name 'empBean' defined in class path resource [spring-byConstructor.xml]: Unsatisfied
dependency expressed through constructor argument with index 0 of type
[www.csdn.spring.autowire.DeptBean]: : No qualifying bean of type
[www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but found 2:
deptBean1,deptBean2; nested exception is
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of
type [www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but found
2: deptBean1,deptBean2
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying
bean of type [www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but
found 2: deptBean1,deptBean2
错误原因: spring 配置文件中自动装配按 constructor 时出的问题,配置文件, 红色部分为错
误的解释和导致错误的原因如下:
<!-- 在 spring3.2 以上版本中:使用构造器自动装配时,如果有一个 id 与 bean 实例中的属
性名相同的配置 bean 存在,虽然构造器自动装配是按类型自动装配的,
但是即使有多个相同类型的 bean 存在也不受影响;受影响的情况是:没有与 bean 实例中
的属性名相同的配置 bean 存在,
又有多个相同类型的 bean 配置,就会抛异常-->
<bean id="deptBean" class="www.csdn.spring.autowire.DeptBean">
<property name="name" value="销售部门"/>
</bean>
<bean id="deptBean1" class="www.csdn.spring.autowire.DeptBean">
<property name="name" value="销售部门"/>
</bean>
<bean id="deptBean2" class="www.csdn.spring.autowire.DeptBean">
<property name="name" value="销售部门"/>
</bean>
<!-- 使用 autoWrie 自动装配,改属性值 constructor;构造器自动装配就是按类型自动装配
beam 实例中必须结合构造器使用,如果没有构造器自动装配后注入不进去值,取出为空
值-->
<bean id="empBean" class="www.csdn.spring.autowire.EmpBean" autowire="constructor
"> <
property name="name" value="杨凯"/>
<!-- <property name="comp" ref="compBean"/>
<property name="dept" ref="deptBean"/> -->
</bean>
10. 错误十
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration
problem: Unexpected failure
during bean definition parsing
Offending resource: class path resource [spring-collection.xml]
Bean 'collectionBean'; nested exception is
org.springframework.beans.factory.parsing.BeanDefinitionParsingException:
Configuration problem: <property> element for property 'users' must specify a ref or value
Offending resource: class path resource [spring-collection.xml]
Bean 'collectionBean'
-> Property 'users'
Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException:
Configuration problem: <property>
element for property 'users' must specify a ref or value
Offending resource: class path resource [spring-collection.xml]
Bean 'collectionBean'
-> Property 'users'
乍一看,有些许没有头脑,但是放下心仔细看看,提示说什么 users 属性怎么怎么滴;还
有一点提示就是说是 spring-collection.xml 配置文件中的错误,这就好找,找到改配置中
有关 users 的地方,
<bean id="u1" class="www.csdn.spring.collection.set.User">
<property name="name" value="杨凯" />
<property name="age" value="22" />
</bean>
。。。。。
这样的代码肯定不会出错了,如果是这里的错报的就不是这个错了,可能就是第一条或第
二条错了;再找下一块有 users 的地方,找到了这里:
<!-- list 集合 -->
<property name="users">
<!-- <array>
<ref bean="u1" />
<ref bean="u2" />
<ref bean="u3" />
</array> -->
<!-- <list>
<ref bean="u1"/>
<ref bean="u2"/>
<ref bean="u3"/>
</list> -->
<!-- 还可以通过 spring 自带的 sehema 约束中的 util 工具约束的 list 集合遍历-->
<util:list>
<ref bean="u1" />
<ref bean="u2" />
<ref bean="u3" />
</util:list>
</property>
仔细一看真是这里的错,红色部分最开始忘了写,注释掉了上面的 list 注入值的方式,后
面的 uti 标签注入值有没有写,这是在测试类中取值遍历的时候就会遍历一个空的 users,
这是因为是没有注入值的错,所以没有报空指针的错,报的是这种莫名其妙的错。
11. 错误十一
org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named
'proxyFactoryBean' must be of type [www.csdn.spring.advice.SayServiceImpls], but was actually
of type [$Proxy4]
这种错误一般出在 aop 面向切面的编程中,spring 面向切面的代理有两种,一种是 jdk 动态代
理,一种是 cglib 代理;这是你在使用的的使用如果混合时候就会出现上面的错;这两种代理的
区别是前者是接口代理,就是返回一个接口类型对象,而后者是类代理,不能返回接口类型对
象只能返回类类型对象,如果返回接口了同样会出这样的错。
还有可能出错的地方就是对应的 spring 配置文件,这
里是最容易马虎出错的地方,仔细检查一下的你的目标对象,比如: <!-- 目标对象 -->
<property name="target">
<ref bean="sayServiceImpls"/>
</property>
这里在引用 bean 的时候可能引入错误,可能会引入 jdk 动态代理的目标类,也有可能你的
目标类中实现了某些接口,不符合 cglib 代理的理念;还有可能马虎出错的地方:
<!-- 真实主题 目标对象 -->
<bean id="sayServiceImpls" class="www.csdn.spring.advice.SayServiceImpls"></bean>
真实对象的 id 和 class 属性设置错误的时候也会出错。
12. 错误十二
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'proxyFactoryBean' defined in class path resource [spring-advice.xml]: Error setting property
values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested
PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property
'proxyInterfaces' threw exception; nested exception is java.lang.IllegalArgumentException:
[www.csdn.spring.proxy.advice.SayServiceImpl] is not an interface
Caused by: org.springframework.beans.PropertyBatchUpdateException; nested
PropertyAccessExceptions (1) are:PropertyAccessException 1:
org.springframework.beans.MethodInvocationException: Property 'proxyInterfaces' threw
exception; nested exception is
java.lang.IllegalArgumentException: [www.csdn.spring.proxy.advice.SayServiceImpl] is not an
interface
这个问题很好解决,最关键的问题出在红色部分,原因是在 spring 相关配置文件中设置抽
象主题的时候,既然是抽象主题就应该设置成接口,而不应该是实现类。比如下面的代
码,注意红色部分:
<!--抽象主题 实现接口 -->
<property name="proxyInterfaces">
<array>
<value>www.csdn.spring.proxy.advice.SayServiceImpl</value>
</array>
</property>
正确的写法应该是:
<!--抽象主题 实现接口 -->
<property name="proxyInterfaces">
<array>
<value>www.csdn.spring.proxy.advice.SayService</value>
</array>
</property>
13. 错误十三
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'proxyFactoryBean': FactoryBean threw exception on object creation; nested exception is
org.springframework.aop.framework.AopConfigException: Unknown advisor type class
www.csdn.spring.proxy.advice.AuditableImpl; Can only include Advisor or Advice type beans in
interceptorNames chain except for last entry,which may also be target or TargetSource; nested
exception is org.springframework.aop.framework.adapter.UnknownAdviceTypeException:
Advice object [www.csdn.spring.proxy.advice.AuditableImpl@1f758500] is neither a supported
subinterface of [org.aopalliance.aop.Advice] nor an [org.springframework.aop.Advisor]
Caused by: org.springframework.aop.framework.AopConfigException: Unknown advisor type
class www.csdn.spring.proxy.advice.AuditableImpl; Can only include Advisor or Advice type
beans in interceptorNames chain except for last entry,which may also be target or TargetSource;
nested exception is
org.springframework.aop.framework.adapter.UnknownAdviceTypeException: Advice object
[www.csdn.spring.proxy.advice.AuditableImpl@1f758500] is neither a supported subinterface of
[org.aopalliance.aop.Advice] nor an [org.springframework.aop.Advisor]
这个错误即红色部分提示的错误,不知道 advice 类型的异常,说白了就是编写的 spring
通知的错误,这种错误比较常见,也是出于马虎的错误,比如前者通知、后置通知、环绕
通知、异常通知、引入通知等这几个通知中的任何一个通知类忘了写继承的父类;以下列
出这几个通知的类编写所继承的类:
前置通知:
public class BeforeAdvice implements MethodBeforeAdvice
后置通知:
public class AfterAdvice implements AfterReturningAdvice
环绕通知:
public class AroundAdvice implements MethodInterceptor
异常通知:
public class ThrowAdvice implements ThrowsAdvice
引入通知:
public class AuditableImpl extends DelegatingIntroductionInterceptor implements Auditable
14. 错误十四
java.lang.ClassCastException:
$Proxy10 cannot be cast to www.csdn.spring.proxy.advice.Auditable
java.lang.ClassCastException:
$Proxy11 cannot be cast to www.csdn.spring.proxy.advice.Auditable
像以上这个出现$ProxyXX cannot be cast to www.csdn.spring.proxy.advice.Auditable;什
么代理不能强转成某一个类型的错误,一般都是在使用 JDK 动态代理或 cglib 代理的时候
出现的错误,错误原因有:
1) .JDK 动态代理与 cglib 代理混淆,比如使用 cglib 代理时不能实现接口,你可能在使用
的时候使用了 cglib 代理,但是却实现了接口,如果你在 spring 配置文件中使用 aspectjs
来进行通知,又想使用 cglib 接口那么你需要做的是目标类不实现接口, spring 配置文件中
配置 aop 的时候加上下面红色部分。
<aop:aspectj-autoproxyproxy-target-class="true"/>
2)同样是使用 aspectjs 通知的时候,尤其是使用引入通知的时候,一定不要忘了让引用
通知的业务类加上注解@Aspect;还要注意的是你使用的引入目标类和其实现接口的类路
径一定要正确,我这里就范了一个小错误,到错包的错:
package www.csdn.spring.proxy.advice.aspectjs;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclareParents;
@Aspect
publicclass AuditableService {
@DeclareParents(value="*..*Service*", defaultImpl = AuditableImpl.class)
public Auditable auditable;
}
我在使用 Auditable 接口的时候倒错了包,这里其实类都在同一包下,根本不用倒包,但
是我从上一个包中复制代码的时候自动给我引入了上一个包的 Auditable 类;以后一定要
注意了
15. 错误十五
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration
problem: <aspect> tag needs aspect bean reference via 'ref' attribute when declaring advices.
Offending resource: file [F:\csdn-study\MyWorkspace\springHelloJava\bin\springpojoXmlAspectjs.xml]
Aspect: ref=''
这个错误顾名思义,这里已经提示的很清了,这里列出这个错误是对那些对 pojo-xml 配置
通知不太熟悉的同学而言;这个错误就是在对应的 spring 配置文件中使用 aop 切面的时候
忘写了一个 ref 熟悉的错,具体案例代码如下,注意下面的红色部分,错误就出在红色部
分忘了写 ref="adviceService":
<!-- 使用 pojo-xml aspectjs 配置自动代理 -->
<aop:config>
<!-- 配置切面 -->
<aop:aspect ref="adviceService">
<!-- 引入通知 -->
<aop:declare-parents types-matching="*..*Service*"
implement-interface="www.csdn.spring.proxy.advice.aspectjs.pojoxml.Auditable"
default-impl="www.csdn.spring.proxy.advice.aspectjs.pojoxml.AuditableImpl" />
<!-- 切面切入的位置切入点,可以同时写多个不同的切入点 -->
<aop:pointcut expression="execution(* www.csdn..UserServiceImpl.save(..))"
id="myPcut" />
<aop:pointcut expression="execution(* www.csdn..UserServiceImpl.update(..))"
id="myPcuts" />
<!--织入通知 method:指明方法; pointcut-ref 引入切入点 -->
<aop:before method="beforeMethod" pointcut-ref="myPcut" />
<aop:after method="afterMethod" pointcut-ref="myPcut" />
<aop:around method="aroundMethod" pointcut-ref="myPcuts" />
</aop:aspect>
</aop:config>
16. 错误十六
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'deptDaoImpl' defined in class path resource [spring-dao.xml]: Could not resolve matching
constructor (hint: specify index/type/name arguments for simple parameters to avoid type
ambiguities)
关键是蓝色部分,蓝色部分已经给出了提示:不匹配的构造器,这种错误出在 spring 配置中,使
用 namedParameterJdbcTemplate 时出的错,错误出在下面:
<bean id="namedParameterJdbcTemplate"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<property name="namedParameterJdbcTemplate" ref="namedParameterJdbcTemplate"
/>
</bean>
正确写法:
<bean id="deptDaoImpl" class="www.csdn.spring.jdbc.DeptDaoImpl">
<property name="namedParameterJdbcTemplate" ref="namedParameterJdbcTemplate"
/>
</bean>
由于对该类不理解或者复制时容易出这样的错误
17. 错误十七
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'localSessionFactoryBean' defined in class path resource [spring-hibernate.xml]: Invocation of init
method failed; nested exception is org.hibernate.HibernateException: 'hibernate.dialect' must be
set when no Connection available
Caused by: org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type '$Proxy5 implementing cn.itcast.service.IEmployeeService,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised' to required type 'cn.itcast.dao.IEmployeeDao' for property 'employeeService'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [$Proxy5 implementing cn.itcast.service.IEmployeeService,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [cn.itcast.dao.IEmployeeDao] for property 'employeeService': no matching editors or conversion strategy found
这种错误一般是 employeeServuce 那里的私有变量出错了
的同学们共勉一下。
1. 错误一
Error creating bean with name 'helloServiceImpl' defined in class path resource [springservice.xml]: Error setting property values; nested exception is
org.springframework.beans.NotWritablePropertyException: Invalid property 'helloDao' of bean
class [www.csdn.spring.service.impl.HelloServiceImpl]: Bean property 'helloDao' is not writable
or has an invalid setter method. Does the parameter type of the setter match the return type of the
getter?
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property
'helloDao' of bean class
这类错误是:一般都是创建了一个 dao 的 spring 文件比如 spring-dao 有创建了一个 service 的
spring 文件,在 spring-service.xml 中引用 dao 的中定义的 id 名,导致的错误,疏忽是: 写
service 实现类的时候忘记了写对应 dao 的 setter 方法,即所谓的依赖注入
比如:
private HelloDao helloDao;
//set 依赖注入很重要,不写会报错,不能读写 helloDao 这一属性
publicvoid setHelloDao(HelloDao helloDao) {
System.out
.println("控制反转:应用程序本身不在负责创建 helloDao 对象,而是由 spring 容器负责创
建、管理、维护,这样控制权转移,称为反转。 "
+ "可以通过依赖注入方式注入该 HelloDao 对象");
this.helloDao = helloDao;
}
2. 错误二
Configuration problem: Failed to import bean definitions from relative location [springdao.xml]Offending resource: class path resource [spring.xml]; nested exception is
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 9 in XML
document from class path resource [spring-dao.xml] is invalid; nested exception is
org.xml.sax.SAXParseException: Open quote is expected for attribute "{1}" associated with an
element type "scope".
Caused by: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 9 in
XML document from class path resource [spring-dao.xml] is invalid; nested exception is
org.xml.sax.SAXParseException: Open quote is expected for
Caused by: org.xml.sax.SAXParseException: Open quote is expected for attribute "{1}"
associated with an element type "scope".
这种错误是马虎的错误,在对应的 spring 的配置文件中, bean 标签的 scope 属性忘了加引
号,在配置文件中国不会报错,但是在运行的时候就会出这样的错,一般导致错误的原因
是复制的时候疏忽了引号,直接将原来的引号覆盖了,导致了最后该属性没有引号。
<bean id="helloDaoImpl" class="www.csdn.spring.dao.impl.HelloDaoImpl"
scope="prototype"></bean>
错误的写成:
bean id="helloDaoImpl" class="www.csdn.spring.dao.impl.HelloDaoImpl"
scope=prototype></bean>
3. 错误三
No bean named 'helloServiceImp' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition
这种报错但是没有 Caused by 语句的错误一般都是使用的时候单词写错了,这里写错的地
方是在 java 类中,类中引用 id 的时候写错了单词;比如这里的错,注意下面的红色文字:
HelloService helloService2 = (HelloService)
context.getBean("helloServiceImp",HelloServiceImpl.class);
<bean id="helloServiceImpl" class="www.csdn.spring.service.impl.HelloServiceImpl" sco
pe="singleton" lazy-init="false">
<property name="helloDao" ref="helloDaoImpl"/>
</bean>
眼尖的哥们估计都看出来了这两个单词写的不一样,获取 bean 的方法中引用的 id 少写了
一个“i”,导致 spring 容器在读取的时候不能识别。以后注意细心就好。
4. 错误四
Error creating bean with name 'helloServiceImpl' defined in class path resource [springservice.xml]: Cannot resolve reference to bean 'helloDaoImp' while setting bean property
'helloDao'; nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named
'helloDaoImp' is defined
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named
'helloDaoImp' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition
这种也是单词写错的情况,与上面不同的是这种情况给出了 Caused by 语句,让你更清楚
错误发生的原因,英文还差不多的哥们或者有一定编程经验的人员一看 Caused by 语句就
应该能判断出什么错误;这里错误原因明显才、指出每一个名字为'helloDaoImp'的 bean,
或名字为'helloDaoImp'的 bean 未定义,这种错也好好找,一般都是互相引用的 spring 配置
文件马虎出的错,下面一个例子说明:比如 spring-service.xml 引用 spring-dao 的时候,还
是如上面说的一样,重点再红色字体
Service 配置文件中这么写:
<bean id="helloServiceImpl" class="www.csdn.spring.service.impl.HelloServiceImpl" sco
pe="singleton" lazy-init="false">
<property name="helloDao" ref="helloDaoImp"/>
</bean>
但是 dao 配置文件中却这么写:
bean id="helloDaoImpl" class="www.csdn.spring.dao.impl.HelloDaoImpl"
scope="prototype"></bean>
写到这大家就清楚了吧,与上一个错误基本上一样,都是单词写错的错误,只不过不同的
是上一个错误是在 java 类中引用 id 的时候写错单词出的错,而这一个错误是在 spring 配置
文件中国引用 id 出的错,万变不离其宗,错误的额原因都是单词写错,今后细心即可。
5. 错误五
Cannot find class [www.csdn.spring.dao.imp.HelloDaoImpl] for bean with name
'helloDaoImpl' defined in ServletContext resource [/WEB-INF/applicationContext.xml];
nested exception
isjava.lang.ClassNotFoundException:www.csdn.spring.dao.imp.HelloDaoImpl
Caused by: java.lang.ClassNotFoundException: www.csdn.spring.dao.HelloDaoImpl
错误原因:倒错包了,我的 web 项目 HelloDaoImpl 在 dao.impl 包下而不是 dao 包下。所
以包这样的错,看一下 spring 配置文具店额 classes 标签的值导入的类包名是否正确
6. 错误六
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating
bean with name 'employeeBean' defined in class path resource [spring-constructor.xml]:
Unsatisfied dependency expressed through constructor argument with index 2 of type
[double]: Ambiguous constructor argument types - did you specify the correct bean
references as constructor arguments?
错误原因: bean 实例类中的属性类型与 spring 配置文件中的构造器属性类型不对应所导
致,这种情况多出在使用类型指定构造器参数;比如:
类中属性如下,重点注意红色部分:
private String name;
private String sex;
private doublesalary;
spring 配置文件中的构造器标签
<constructor-arg type="java.lang.String" value="杨凯" />
<constructor-arg type="java.lang.String" value="男" />
<constructor-arg type=" java.lang.Double" value="5000.00" />
这种错误是因为构造器中的 type 属性不会自动对应拆箱装箱属性类型,简单点说就是类中
使用的是基本数据类型,配置文件中对应的 type 属性值就要是基本数据类型;类中使用的
是类类型,配置文件中对应的 type 属性值就要是包名加上类类型;
还有一种原因就是不对应的原因, constructor-arg 直接写错了,比如:
private doublesalary;对应了<constructor-arg type=" Double" value="5000.00" />
或者顺序不对的情况下回出现赋值错误,比如同时存在两个相同类型的属性, name 应该
为“杨凯”,如果 sex 在配置文件的位置与 name 的颠倒了,会出现 name=“男”的情况
7. 错误七
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'memberBean' defined in class path resource [spring-construtor.xml]: Initialization of bean failed;
nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to
convert property value of type 'java.lang.String' to required type
'www.csdn.spring.constructor.Member' for property 'member'; nested exception is
java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type
[www.csdn.spring.constructor.Member] for property 'member': no matching editors or conversion
strategy found
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert
property value of type 'java.lang.String' to required type 'www.csdn.spring.constructor.Member'
for property 'member'; nested exception is java.lang.IllegalStateException: Cannot convert value
of type [java.lang.String] to required type [www.csdn.spring.constructor.Member] for property
'member': no matching editors or conversion strategy found
错误原因:这种情况是一个 bean 实例引用另一个 bean 实例对象,而引用的那个 bean 实例
对象为空,但是在改 bean 实例的配置文件中又错误指明空值。举个例子说明:
<bean id="memberBean" class="www.csdn.spring.constructor.MemberBean">
<!-- value="null" 这里给 value 赋的是一个空字符串,而不是一个 null 空值 -->
<property name="name" value="null"/>
<property name="member">
<null/>
</property>
</bean>
关键看红色部分,红色部分是正确的写法,这样写引用空值对象才不会报错,但是如果你
像上面引用 nam 属性那样指明 value=“null”就会出现改错。
8. 错误八
错误一:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration
problem: Bean name 'deptBean' is already used in this <beans> element
Offending resource: class path resource [spring-byType.xml]
错误二:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with
name 'empBean' defined in class path resource [spring-byType.xml]: Unsatisfied dependency
expressed through bean property 'deptBean': : No qualifying bean of type
[www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but found 2:
deptBean,deptBean1; nested exception is
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of
type [www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but found
2: deptBean,deptBean1
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying
bean of type [www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but
found 2: deptBean,deptBean1
这两种错误原因:都是 spring 配置文件中自动装配按 byType 时出的问题,配置文件, 红色部
分为错误的解释和导致错误的原因如下:
<bean id="compBean" class="www.csdn.spring.autowire.CompBean">
<property name="name" value="DELL"/>
</bean>
<bean id="deptBean" class="www.csdn.spring.autowire.DeptBean">
<property name="name" value="销售部门"/>
</bean>
<!--
这里只能出现一个 deotBean,id 名不一样但是类型一样,都是 deptBean 实体的;
id="deptBean"或同类型的不同 id 都会抛异常
<bean id="deptBean1" class="www.csdn.spring.autowire.DeptBean">
<property name="name" value="销售部门"/>
</bean> -->
<!-- 使用 autoWrie 自动装配,改属性值 byType;
按类型自动装配,前提是同一个类型的只能有一个-->
<bean id="empBean" class="www.csdn.spring.autowire.EmpBean" autowire="byType">
<property name="name" value="杨凯"/>
<!-- <property name="comp" ref="compBean"/>
<property name="dept" ref="deptBean"/> -->
</bean>
9. 错误九
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with
name 'empBean' defined in class path resource [spring-byConstructor.xml]: Unsatisfied
dependency expressed through constructor argument with index 0 of type
[www.csdn.spring.autowire.DeptBean]: : No qualifying bean of type
[www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but found 2:
deptBean1,deptBean2; nested exception is
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of
type [www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but found
2: deptBean1,deptBean2
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying
bean of type [www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but
found 2: deptBean1,deptBean2
错误原因: spring 配置文件中自动装配按 constructor 时出的问题,配置文件, 红色部分为错
误的解释和导致错误的原因如下:
<!-- 在 spring3.2 以上版本中:使用构造器自动装配时,如果有一个 id 与 bean 实例中的属
性名相同的配置 bean 存在,虽然构造器自动装配是按类型自动装配的,
但是即使有多个相同类型的 bean 存在也不受影响;受影响的情况是:没有与 bean 实例中
的属性名相同的配置 bean 存在,
又有多个相同类型的 bean 配置,就会抛异常-->
<bean id="deptBean" class="www.csdn.spring.autowire.DeptBean">
<property name="name" value="销售部门"/>
</bean>
<bean id="deptBean1" class="www.csdn.spring.autowire.DeptBean">
<property name="name" value="销售部门"/>
</bean>
<bean id="deptBean2" class="www.csdn.spring.autowire.DeptBean">
<property name="name" value="销售部门"/>
</bean>
<!-- 使用 autoWrie 自动装配,改属性值 constructor;构造器自动装配就是按类型自动装配
beam 实例中必须结合构造器使用,如果没有构造器自动装配后注入不进去值,取出为空
值-->
<bean id="empBean" class="www.csdn.spring.autowire.EmpBean" autowire="constructor
"> <
property name="name" value="杨凯"/>
<!-- <property name="comp" ref="compBean"/>
<property name="dept" ref="deptBean"/> -->
</bean>
10. 错误十
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration
problem: Unexpected failure
during bean definition parsing
Offending resource: class path resource [spring-collection.xml]
Bean 'collectionBean'; nested exception is
org.springframework.beans.factory.parsing.BeanDefinitionParsingException:
Configuration problem: <property> element for property 'users' must specify a ref or value
Offending resource: class path resource [spring-collection.xml]
Bean 'collectionBean'
-> Property 'users'
Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException:
Configuration problem: <property>
element for property 'users' must specify a ref or value
Offending resource: class path resource [spring-collection.xml]
Bean 'collectionBean'
-> Property 'users'
乍一看,有些许没有头脑,但是放下心仔细看看,提示说什么 users 属性怎么怎么滴;还
有一点提示就是说是 spring-collection.xml 配置文件中的错误,这就好找,找到改配置中
有关 users 的地方,
<bean id="u1" class="www.csdn.spring.collection.set.User">
<property name="name" value="杨凯" />
<property name="age" value="22" />
</bean>
。。。。。
这样的代码肯定不会出错了,如果是这里的错报的就不是这个错了,可能就是第一条或第
二条错了;再找下一块有 users 的地方,找到了这里:
<!-- list 集合 -->
<property name="users">
<!-- <array>
<ref bean="u1" />
<ref bean="u2" />
<ref bean="u3" />
</array> -->
<!-- <list>
<ref bean="u1"/>
<ref bean="u2"/>
<ref bean="u3"/>
</list> -->
<!-- 还可以通过 spring 自带的 sehema 约束中的 util 工具约束的 list 集合遍历-->
<util:list>
<ref bean="u1" />
<ref bean="u2" />
<ref bean="u3" />
</util:list>
</property>
仔细一看真是这里的错,红色部分最开始忘了写,注释掉了上面的 list 注入值的方式,后
面的 uti 标签注入值有没有写,这是在测试类中取值遍历的时候就会遍历一个空的 users,
这是因为是没有注入值的错,所以没有报空指针的错,报的是这种莫名其妙的错。
11. 错误十一
org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named
'proxyFactoryBean' must be of type [www.csdn.spring.advice.SayServiceImpls], but was actually
of type [$Proxy4]
这种错误一般出在 aop 面向切面的编程中,spring 面向切面的代理有两种,一种是 jdk 动态代
理,一种是 cglib 代理;这是你在使用的的使用如果混合时候就会出现上面的错;这两种代理的
区别是前者是接口代理,就是返回一个接口类型对象,而后者是类代理,不能返回接口类型对
象只能返回类类型对象,如果返回接口了同样会出这样的错。
还有可能出错的地方就是对应的 spring 配置文件,这
里是最容易马虎出错的地方,仔细检查一下的你的目标对象,比如: <!-- 目标对象 -->
<property name="target">
<ref bean="sayServiceImpls"/>
</property>
这里在引用 bean 的时候可能引入错误,可能会引入 jdk 动态代理的目标类,也有可能你的
目标类中实现了某些接口,不符合 cglib 代理的理念;还有可能马虎出错的地方:
<!-- 真实主题 目标对象 -->
<bean id="sayServiceImpls" class="www.csdn.spring.advice.SayServiceImpls"></bean>
真实对象的 id 和 class 属性设置错误的时候也会出错。
12. 错误十二
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'proxyFactoryBean' defined in class path resource [spring-advice.xml]: Error setting property
values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested
PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property
'proxyInterfaces' threw exception; nested exception is java.lang.IllegalArgumentException:
[www.csdn.spring.proxy.advice.SayServiceImpl] is not an interface
Caused by: org.springframework.beans.PropertyBatchUpdateException; nested
PropertyAccessExceptions (1) are:PropertyAccessException 1:
org.springframework.beans.MethodInvocationException: Property 'proxyInterfaces' threw
exception; nested exception is
java.lang.IllegalArgumentException: [www.csdn.spring.proxy.advice.SayServiceImpl] is not an
interface
这个问题很好解决,最关键的问题出在红色部分,原因是在 spring 相关配置文件中设置抽
象主题的时候,既然是抽象主题就应该设置成接口,而不应该是实现类。比如下面的代
码,注意红色部分:
<!--抽象主题 实现接口 -->
<property name="proxyInterfaces">
<array>
<value>www.csdn.spring.proxy.advice.SayServiceImpl</value>
</array>
</property>
正确的写法应该是:
<!--抽象主题 实现接口 -->
<property name="proxyInterfaces">
<array>
<value>www.csdn.spring.proxy.advice.SayService</value>
</array>
</property>
13. 错误十三
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'proxyFactoryBean': FactoryBean threw exception on object creation; nested exception is
org.springframework.aop.framework.AopConfigException: Unknown advisor type class
www.csdn.spring.proxy.advice.AuditableImpl; Can only include Advisor or Advice type beans in
interceptorNames chain except for last entry,which may also be target or TargetSource; nested
exception is org.springframework.aop.framework.adapter.UnknownAdviceTypeException:
Advice object [www.csdn.spring.proxy.advice.AuditableImpl@1f758500] is neither a supported
subinterface of [org.aopalliance.aop.Advice] nor an [org.springframework.aop.Advisor]
Caused by: org.springframework.aop.framework.AopConfigException: Unknown advisor type
class www.csdn.spring.proxy.advice.AuditableImpl; Can only include Advisor or Advice type
beans in interceptorNames chain except for last entry,which may also be target or TargetSource;
nested exception is
org.springframework.aop.framework.adapter.UnknownAdviceTypeException: Advice object
[www.csdn.spring.proxy.advice.AuditableImpl@1f758500] is neither a supported subinterface of
[org.aopalliance.aop.Advice] nor an [org.springframework.aop.Advisor]
这个错误即红色部分提示的错误,不知道 advice 类型的异常,说白了就是编写的 spring
通知的错误,这种错误比较常见,也是出于马虎的错误,比如前者通知、后置通知、环绕
通知、异常通知、引入通知等这几个通知中的任何一个通知类忘了写继承的父类;以下列
出这几个通知的类编写所继承的类:
前置通知:
public class BeforeAdvice implements MethodBeforeAdvice
后置通知:
public class AfterAdvice implements AfterReturningAdvice
环绕通知:
public class AroundAdvice implements MethodInterceptor
异常通知:
public class ThrowAdvice implements ThrowsAdvice
引入通知:
public class AuditableImpl extends DelegatingIntroductionInterceptor implements Auditable
14. 错误十四
java.lang.ClassCastException:
$Proxy10 cannot be cast to www.csdn.spring.proxy.advice.Auditable
java.lang.ClassCastException:
$Proxy11 cannot be cast to www.csdn.spring.proxy.advice.Auditable
像以上这个出现$ProxyXX cannot be cast to www.csdn.spring.proxy.advice.Auditable;什
么代理不能强转成某一个类型的错误,一般都是在使用 JDK 动态代理或 cglib 代理的时候
出现的错误,错误原因有:
1) .JDK 动态代理与 cglib 代理混淆,比如使用 cglib 代理时不能实现接口,你可能在使用
的时候使用了 cglib 代理,但是却实现了接口,如果你在 spring 配置文件中使用 aspectjs
来进行通知,又想使用 cglib 接口那么你需要做的是目标类不实现接口, spring 配置文件中
配置 aop 的时候加上下面红色部分。
<aop:aspectj-autoproxyproxy-target-class="true"/>
2)同样是使用 aspectjs 通知的时候,尤其是使用引入通知的时候,一定不要忘了让引用
通知的业务类加上注解@Aspect;还要注意的是你使用的引入目标类和其实现接口的类路
径一定要正确,我这里就范了一个小错误,到错包的错:
package www.csdn.spring.proxy.advice.aspectjs;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclareParents;
@Aspect
publicclass AuditableService {
@DeclareParents(value="*..*Service*", defaultImpl = AuditableImpl.class)
public Auditable auditable;
}
我在使用 Auditable 接口的时候倒错了包,这里其实类都在同一包下,根本不用倒包,但
是我从上一个包中复制代码的时候自动给我引入了上一个包的 Auditable 类;以后一定要
注意了
15. 错误十五
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration
problem: <aspect> tag needs aspect bean reference via 'ref' attribute when declaring advices.
Offending resource: file [F:\csdn-study\MyWorkspace\springHelloJava\bin\springpojoXmlAspectjs.xml]
Aspect: ref=''
这个错误顾名思义,这里已经提示的很清了,这里列出这个错误是对那些对 pojo-xml 配置
通知不太熟悉的同学而言;这个错误就是在对应的 spring 配置文件中使用 aop 切面的时候
忘写了一个 ref 熟悉的错,具体案例代码如下,注意下面的红色部分,错误就出在红色部
分忘了写 ref="adviceService":
<!-- 使用 pojo-xml aspectjs 配置自动代理 -->
<aop:config>
<!-- 配置切面 -->
<aop:aspect ref="adviceService">
<!-- 引入通知 -->
<aop:declare-parents types-matching="*..*Service*"
implement-interface="www.csdn.spring.proxy.advice.aspectjs.pojoxml.Auditable"
default-impl="www.csdn.spring.proxy.advice.aspectjs.pojoxml.AuditableImpl" />
<!-- 切面切入的位置切入点,可以同时写多个不同的切入点 -->
<aop:pointcut expression="execution(* www.csdn..UserServiceImpl.save(..))"
id="myPcut" />
<aop:pointcut expression="execution(* www.csdn..UserServiceImpl.update(..))"
id="myPcuts" />
<!--织入通知 method:指明方法; pointcut-ref 引入切入点 -->
<aop:before method="beforeMethod" pointcut-ref="myPcut" />
<aop:after method="afterMethod" pointcut-ref="myPcut" />
<aop:around method="aroundMethod" pointcut-ref="myPcuts" />
</aop:aspect>
</aop:config>
16. 错误十六
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'deptDaoImpl' defined in class path resource [spring-dao.xml]: Could not resolve matching
constructor (hint: specify index/type/name arguments for simple parameters to avoid type
ambiguities)
关键是蓝色部分,蓝色部分已经给出了提示:不匹配的构造器,这种错误出在 spring 配置中,使
用 namedParameterJdbcTemplate 时出的错,错误出在下面:
<bean id="namedParameterJdbcTemplate"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<property name="namedParameterJdbcTemplate" ref="namedParameterJdbcTemplate"
/>
</bean>
正确写法:
<bean id="deptDaoImpl" class="www.csdn.spring.jdbc.DeptDaoImpl">
<property name="namedParameterJdbcTemplate" ref="namedParameterJdbcTemplate"
/>
</bean>
由于对该类不理解或者复制时容易出这样的错误
17. 错误十七
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'localSessionFactoryBean' defined in class path resource [spring-hibernate.xml]: Invocation of init
method failed; nested exception is org.hibernate.HibernateException: 'hibernate.dialect' must be
set when no Connection available
Caused by: org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type '$Proxy5 implementing cn.itcast.service.IEmployeeService,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised' to required type 'cn.itcast.dao.IEmployeeDao' for property 'employeeService'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [$Proxy5 implementing cn.itcast.service.IEmployeeService,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [cn.itcast.dao.IEmployeeDao] for property 'employeeService': no matching editors or conversion strategy found
这种错误一般是 employeeServuce 那里的私有变量出错了
相关推荐
Spring框架是Java开发中的一个核心组件,主要用于简化企业级应用的开发。本示例将带你逐步了解Spring的基本概念和XML配置文件...所以,无论你是Java新手还是经验丰富的开发者,Spring都是值得投入时间学习的重要框架。
总之,《Spring从入门到精通》是一本全面的Spring学习资料,无论是对Java新手还是资深开发者,都能从中受益,提升自己的Spring技能,从而在Java开发领域更上一层楼。通过阅读这本书,你可以掌握Spring的核心原理,...
Spring 2.5依赖注入(DI)是Java应用程序开发中的一个重要概念,它允许开发者将对象之间的依赖关系解耦,使得代码更加灵活、可维护。在这个名为"spring2.5依赖注入示例"的小demo中,我们将探讨Spring框架如何实现DI...
// UserMapper.java - DAO接口定义 public interface UserMapper { public User getUserById(int id); } // UserMapper.xml - 映射文件 select * from t_user where id = #{id}; // User.java - 实体类 ...
通过这个全面的SpringBoot实战教程,无论你是Java新手还是经验丰富的开发者,都能找到提升技能和深化理解的宝贵资源。从基本概念到高级实践,每一步都将助你在SpringBoot的世界里稳步前行。现在,是时候开始你的...
Spring框架是中国著名的Java企业级应用开发框架,由Rod Johnson在其著作《Expert One-on-One J2EE Design and Development》中首次提出。它旨在简化Java应用程序的开发,通过控制反转(IoC)和面向切面编程(AOP)的...
【SpringMvc+jdbc简单学生管理系统...虽然项目作者自谦为技术新手,但这个项目提供了一个良好的学习起点,帮助理解MVC架构和数据库操作的基本原理。对于初学者来说,这样的实践有助于巩固理论知识,提升实际编程技能。
这个整合开发包已经去除了不必要的依赖,避免了jar包冲突问题,对于新手来说,可以直接导入项目中使用,省去了配置环境和解决依赖问题的繁琐步骤。不过,随着技术的发展,更现代的框架如Spring Boot和Spring MVC + ...
这将有助于开发者解决实际问题,提升代码质量,以及为社区贡献自己的代码。 总之,Spring 4.0.0是一个重要的里程碑,它不仅增强了对新特性的支持,优化了性能,还提供了更多便利的开发工具。无论是新手还是经验丰富...
Spring框架是Java开发中的...无论是对于新手还是经验丰富的开发者,Spring都能提供一套高效、灵活的解决方案。通过深入理解和熟练掌握Spring框架,开发者可以构建出健壮、可维护的应用程序,同时也能享受到开发的乐趣。
Spring Boot以其简洁的配置和快速的开发体验,已经成为Java领域中的主流微服务框架,而Mina则是一个强大的网络通信框架,常用于构建高性能、高并发的网络应用。通过整合这两者,我们可以构建出高效、灵活的网络服务...