spring入门(16)--spring常见错误总结 (五)

2014-11-24 10:58:06 · 作者: · 浏览: 3
IntroductionInterceptor 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的时候加上下面红色部分。

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: 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":



implement-interface="www.csdn.spring.proxy.advice.aspectjs.pojoxml.Auditable"

default-impl="www.csdn.spring.proxy.advice.aspectjs.pojoxml.AuditableImpl" />


id="myPcut" />

id="myPcuts" />




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时出的错,错误出在下面:

class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">

正确写法:

由于对该类不理解或者复制时容易出这样的错误

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 available

这里根据提示说错误的原因是当数据库不能连接的时候,需要配置hibernate.dialect'就是hibernate配置的方言,原因出在驱动类的配置,比如:properties文件中的:hibernate.driverClassName=oracle.jdbc.driver.OracleDriver

这里如果写错了就会出现不能连接的情况,驱动的名字一定要正确,配置文件中的其他属性也一定要正确,据我本人测试如果在改配置文件中直接写的driverClassName=oracle.jdbc.driver.OracleDriver

在spring配置文件这样取值时:就会错误,但是如果这样写就对:

18. 错误十八

java.lang.IllegalArgumentException: node to traverse cannot be null!

解决方法:通常此类错误都是由于HQL语句写的不正确,例如from写成了form,或者set A = 1 and B = 2,其中set不同字段用逗号","分离而不是用and.总之仔细检查HQL语句,看看有没有语法错误即可.