精品 word 文档 值得下载 值得拥有 ----------------------------------------------spring 常见错误总结在学习 spring 过程中遇见了种种不同的异常错误,这里做了一下总结,希望遇见类似错误的同学们共勉一下1. 错误一Error creating bean with name 'helloServiceImpl' defined in class path resource[spring-service.xml]: Error setting property values; nested exception is这类错误是 :一般都是创建了一个 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[spring-dao.xml]Offending resource: class path resource [spring.xml]; nested exception is这种错误是马虎的错误, 在对应的 spring 的配置文件中, bean 标签的 scope 属性忘了加引号,在配置文件中国不会报错,但是在运行的时候就会出这样的错,一般导致错误的原因是复制的时候疏忽了引号,直接将原来的引号覆盖了,导致了最后该属性没有引号 ---------------------------- 精品 word 文档 值得下载 值得拥有 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 精品 word 文档 值得下载 值得拥有 ----------------------------------------------错误的写成:scope=prototype>3. 错误三No bean named 'helloServiceImp' is defined这种报错但是没有 Caused by 语句的错误一般都是使用的时候单词写错了,这里写错的地方是在 java 类中,类中引用 id 的时候写错了单词;比如这里的错,注意下面的红色文字:HelloServicehelloService2=(HelloService)context.getBean("helloServiceImp",HelloServiceImpl.class);眼尖的哥们估计都看出来了这两个单词写的不一样,获取bean 的方法中引用的id少写了一个 “i,”导致 spring 容器在读取的时候不能识别。
以后注意细心就好4. 错误四Error creating bean with name 'helloServiceImpl' defined in class path resource [spring-service.xml]: Cannot resolve reference to bean 'helloDaoImp' while setting bean property'helloDao'; nested exception is这种也是单词写错的情况,与上面不同的是这种情况给出了 Caused by 语句,让你更清楚错误发生的原因,英文还差不多的哥们或者有一定编程经验的人员一看 Caused by 语句就应该能判断出什么错误;这里错误原因明显才、指出每一个名字为 'helloDaoImp' 的 bean,或名字为 'helloDaoImp' 的 bean 未定义,这种错也好好找,一般都是互相引用的 spring 配置文件马虎出的错,下面一个例子说明:比如 spring-service.xml 引用 spring-dao 的时候,还是如上面说的一样,重点再红色字体Service配置文件中这么写:但是 dao 配置文件中却这么写:scope="prototype">写到这大家就清楚了吧,与上一个错误基本上一样,都是单词写错的错误,只不过不同的是上一个错误是在 java 类中引用 id 的时候写错单词出的错, 而这一个错误是在 spring 配置文件中国引用 id 出的错,万变不离其宗,错误的额原因都是单词写错,今后细心即可。
5. 错误五 for bean with name 'helloDaoImpl'---------------------------- 精品 word 文档 值得下载 值得拥有 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 精品 word 文档 值得下载 值得拥有 ----------------------------------------------defined in ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is错误原因: 倒错包了, 我的 web 项目 HelloDaoImpl 在 dao.impl 包下而不是 dao 包下。
所以包这样的错,看一下 spring 配置文具店额 classes标签的值导入的类包名是否正确6. 错误六 Error creating bean withname '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 配置文件中的构造器标签这种错误是因为构造器中的type 属性不会自动对应拆箱装箱属性类型,简单点说就是类中使用的是基本数据类型,配置文件中对应的type 属性值就要是基本数据类型;类中使用的是类类型,配置文件中对应的type 属性值就要是包名加上类类型;还有一种原因就是不对应的原因,constructor-arg 直接写错了,比如:private doublesalary;对应了 或者顺序不对的情况下回出现赋值错误,比如同时存在两个相同类型的属性,name 应该为 “杨凯 ”,如果 sex 在配置文件的位置与name 的颠倒了,会出现 name=“男”的情况7. 错误七 Error creating bean with name'memberBean' defined in class path resource [spring-construtor.xml]: Initialization of bean failed;nested exception is Failed toconvert property value of type to required type错误原因:这种情况是一个 bean 实例引用另一个 bean 实例对象,而引用的那个 bean 实例对象为空,但是在改 bean 实例的配置文件中又错误指明空值。
举个例子说明:---------------------------- 精品 word 文档 值得下载 值得拥有 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 精品 word 文档 值得下载 值得拥有 ----------------------------------------------关键看红色部分,红色部分是正确的写法,这样写引用空值对象才不会报错,但是如果你像上面引用 nam 属性那样指明 value= “null就”会出现改错。
8. 错误八错误一 : Configurationproblem: Bean name 'deptBean' is already used in this elementOffending resource: class path resource [spring-byType.xml]错误二 :org.springframework.beans.factory.UnsatisfiedDependencyException:Errorcreatingbeanwithname 'empBean' defined in class path resource [spring-byType.xml]: Unsatisfieddependencyexpressed through bean property 'deptBean': : No qualifyingbeanoftype[www.csdn.spring.autowire.DeptBean]is defined: expected single matchingbean butfound2:deptBean,deptBean1;nestedexceptionisorg.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type[www.csdn.spring.autowire.DeptBean]is defined: expected singlematchingbean butfound2:deptBean,deptBean1Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException:No qualifyingbean of type [www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean butfound 2: deptBean,deptBean1这两种错误原因 :都是 spring 配置文件中自动装配按byType 时出的问题 ,配置文件 ,红色部分为错误的解释和导致错误的原因如下:----------------------------精品word文档 值得下载值得拥有 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 精品 word 文档 值得下载 值得拥有 ----------------------------------------------杨凯 "/>9. 错误九 Error creating bean withname 'empBean' defined in class path resource [spring-byConstructor.xml]: Unsatisfied dependencyexpressedthroughconstructorargumentwithindex0oftype[www.csdn.spring.autowire.DeptBean]::Noqualifyingbeanoftype[www.csdn.spring.autowire.DeptBean]is defined: expected single matching bean butfound 2:deptBean1,deptBean2;nestedexceptionis is defined: expected single matching bean but found 2:deptBean1,deptBean2 No qualifyingfound 2: deptBean1,deptBean2错误原因 : spring 配置文件中自动装配按 constructor 时出的问题 ,配置文件 , 红色部分为错误的解释和导致错误的原因如下:bean 实例中的属性 bean 实例中的销售部门 "/> 销售部门 "/> 销售部门 "/> 杨凯 "/>10. 错误十 Configurationproblem: Unexpected failureduring bean definition parsingOffending resource: class path resource [spring-collection.xml]Offending resource: class path resource [spring-collection.xml] Bean 'collectionBean'-> Property 'users'Caused by: Configuration problem: element for property 'users' must specify a ref or valueOffending resource: class path resource [spring-collection.xml]Bean 'collectionBean'-> Property 'users'乍一看,有些许没有头脑,但是放下心仔细看看,提示说什么 users 属性怎么怎么滴;还有一点提示就是说是 spring-collection.xml 配置文件中的错误,这就好找,找到改配置中有关users 的地方,。
这样的代码肯定不会出错了,如果是这里的错报的就不是这个错了,可能就是第一条或第二条错了;再找下一块有 users的地方,找到了这里: ---------------------------- 精品 word 文档 值得下载 值得拥有 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 精品 word 文档 值得下载 值得拥有 ----------------------------------------------仔细一看真是这里的错,红色部分最开始忘了写,注释掉了上面的 list 的 uti 标签注入值有没有写,这是在测试类中取值遍历的时候就会遍历一个空的因为是没有注入值的错,所以没有报空指针的错,报的是这种莫名其妙的错。
注入值的方式,后面users,这是11. 错误十一Beannamed这种错误一般出在 aop 面向切面的编程中 ,spring 面向切面的代理有两种 ,一种是 jdk 动态代理一种是 cglib 代理 ;这是你在使用的的使用如果混合时候就会出现上面的错 ;这两种代理的区别是前者是接口代理 ,就是返回一个接口类型对象 ,而后者是类代理 ,不能返回接口类型对象只能返回类类型对象 ,如果返回接口了同样会出这样的错还有可能出错的地方就是对应的 spring 配置文件,这里是最容易马虎出错的地方,仔细检查一下的你的目标对象,比如: ,这里在引用 bean 的时候可能引入错误,可能会引入 jdk 动态代理的目标类,也有可能你的目标类中实现了某些接口,不符合 cglib 代理的理念;还有可能马虎出错的地方:真实对象的 id 和 class 属性设置错误的时候也会出错12. 错误十二 Error creating bean with nameCaused by: nestedPropertyAccessExceptions (1) are:PropertyAccessException 1: Property 'proxyInterfaces' threwexception; nested exception is 这个问题很好解决,最关键的问题出在红色部分,原因是在 spring 相关配置文件中设置抽象主题的时候,既然是抽象主题就应该设置成接口,而不应该是实现类。
比如下面的代码,注意红色部分:---------------------------- 精品 word 文档 值得下载 值得拥有 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 精品 word 文档 值得下载 值得拥有 ----------------------------------------------正确的写法应该是:13. 错误十三org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'proxyFactoryBean': FactoryBeanthrew exceptiononobjectcreation;nestedexception isorg.springframework.aop.framework.AopConfigException:Unknownadvisortypeclasswww.csdn.spring.proxy.advice.AuditableImpl; Can only include Advisor or Advice type beans ininterceptorNames chain except forlast entry,whichmay alsobe target orTargetSource; nestedexception is org.springframework.aop.framework.adapter.UnknownAdviceTypeException:Adviceobject[www.csdn.spring.proxy.advice.AuditableImpl@1f758500]isneitherasupportedsubinterface of [org.aopalliance.aop.Advice] nor an [org.springframework.aop.Advisor]Causedby: org.springframework.aop.framework.AopConfigException:Unknownadvisortypeclass www.csdn.spring.proxy.advice.AuditableImpl;CanonlyincludeAdvisor orAdvicetypebeans in interceptorNames chain except forlast entry,which may also be target or TargetSource;nestedexception is org.springframework.aop.framework.adapter.UnknownAdviceTypeException:Adviceobject [www.csdn.spring.proxy.advice.AuditableImpl@1f758500]is neithera supportedsubinterface 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 Auditable14. 错误十四---------------------------- 精品 word 文档 值得下载 值得拥有 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 精品 word 文档 值得下载 值得拥有 ----------------------------------------------像以上这个出现 $ProxyXX 什么代理不能强转成某一个类型的错误,一般都是在使用JDK动态代理或cglib代理的时候出现的错误,错误原因有:1) .JDK 动态代理与 cglib 代理混淆,比如使用 cglib 代理时不能实现接口,你可能在使用的时候使用了 cglib 代理,但是却实现了接口,如果你在 spring 配置文件中使用 aspectjs 来进行通知,又想使用 cglib 接口那么你需要做的是目标类不实现接口, spring 配置文件中配置 aop的时候加上下面红色部分。
2)同样是使用 aspectjs 通知的时候,尤其是使用引入通知的时候,一定不要忘了让引用通知的业务类加上注解 @Aspect ;还要注意的是你使用的引入目标类和其实现接口的类路径一定要正确,我这里就范了一个小错误,到错包的错:@Aspectpublicclass AuditableService {@DeclareParents(value="*..*Service*", defaultImpl = AuditableImpl.class)public Auditable auditable;}我在使用 Auditable 接口的时候倒错了包, 这里其实类都在同一包下, 根本不用倒包, 但是我从上一个包中复制代码的时候自动给我引入了上一个包的 Auditable 类;以后一定要注意了15. 错误十五 Configurationproblem: tag needs aspect bean reference via 'ref' attribute when declaring advices.Offending resource: file[F:\csdn-study\MyWorkspace\springHelloJava\bin\spring-pojoXmlAspectjs.xml] Aspect: ref=''这个错误顾名思义,这里已经提示的很清了,这里列出这个错误是对那些对 pojo-xml 配置通知不太熟悉的同学而言;这个错误就是在对应的 spring 配置文件中使用 aop 切面的时候忘写了一个 ref 熟悉的错,具体案例代码如下,注意下面的红色部分,错误就出在红色部分忘了写 ref="adviceService" :---------------------------- 精品 word 文档 值得下载 值得拥有 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 精品 word 文档 值得下载 值得拥有 ---------------------------------------------- 16. 错误十六 Error creating bean with name'deptDaoImpl' defined in class path resource [spring-dao.xml]: Could not resolve matchingconstructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)关键是蓝色部分 ,蓝色部分已经给出了提示 :不匹配的构造器 ,这种错误出在 spring 配置中 ,使用namedParameterJdbcTemplate时出的错 ,错误出在下面 :正确写法 : 由于对该类不理解或者复制时容易出这样的错误17. 错误十七 Error creating bean with name'localSessionFactoryBean' defined in class path resource [spring-hibernate.xml]: Invocation of init这里根据提示说错误的原因是当数据库不能连接的时候,需要配置 hibernate.dialect' 就是---------------------------- 精品 word 文档 值得下载 值得拥有 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 精品 word 文档 值得下载 值得拥有 ----------------------------------------------hibernate 配 置 的 方 言 , 原 因 出 在 驱 动 类 的 配 置 , 比 如 : properties 文 件 中 的 :这里如果写错了就会出现不能连接的情况,驱动的名字一定要正确,配置文件中的其他属性也 一定要正 确, 据我本 人测 试如 果 在改配置 文件 中直 接 写的在 spring 配 置 文 件 这 样 取 值 时 : 就 会 错 误 , 但 是 如 果 这 样 写 就 对 : 18. 错误十八解决方法 :通常此类错误都是由于 HQL 语句写的不正确 ,例如 from 写成了 form, 或者 set A = 1 and B = 2,其中 set 不同字段用逗号 "," 分离而不是用 and.总之仔细检查 HQL 语句 ,看看有没有语法错误即可 .---------------------------- 精品 word 文档 值得下载 值得拥有 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------。