EXCEPTION-SPRING

CreateTime--2016年8月23日09:00:47
Author:Marydon

声明:异常类文章主要是记录了我遇到的异常信息及解决方案,解决方案大部分都是百度解决的,(这里只是针对我遇到的做个汇总),特此声明!
异常一(Aop异常)

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [config/applicationContext.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0': Cannot resolve reference to bean 'pc' while setting bean property 'pointcut'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pc': Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/BCException

解决方案:
  添加jar包 aspectjweaver.jar
异常二
  config/applicationContext.xml不存在
解决方案:
  添加:classpath:即"classpath:config/applicationContext.xml"
异常五(Aop异常)

Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to com.service.user.bo.impl.BoUser

  解析:
    Spring的文档中这么写的:Spring AOP部分使用JDK动态代理或者CGLIB来为目标对象创建代理。如果被代理的目标实现了至少一个接口,则会使用JDK动态代理。所有该目标类型实现的接口都将被代理。若该目标对象没有实现任何接口,则创建一个CGLIB代理。 所以,解决办法是,如果用JDK动态代理,就必须为被代理的目标实现一个接口(要注意的地方是:需要将ctx.getBean()方法的返回值用接口类型接收);如果使用CGLIB强制代理,就必选事先将CGLIB包导入项目,设置beanNameAutoProxyCreator的proxyTargetClass属性为true。
解决方案:
  这里BoUser实现了接口IBoUser,所以会使用JDK动态代理,从而使(BoUser)applicationContext.getBean("userBo")强制转换的时候报错(因为实现IBoUser接口的代理类是属于BoUser子类)。因此需要使用CGLIB强制代理。需要在springContext.xml中增加如下配置:

<aop:aspectj-autoproxy proxy-target-class="true"/> 

UpdateTime--2017年3月1日11:52:23
异常六(placeholder异常)

org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'amqConnectionFactory' defined in class path resource [com/xyhsoft/demo/conf/spring/activeMQ.xml]: Could not resolve placeholder 'brokerUrl' in string value "${brokerUrl}"

原因:
  配置了多个 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
  这个配置用于 xml 中的占位符,如下:

<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />

解决方案:
  找到xml文件中配置第一个PropertyPlaceholderConfigurer的位置(一般是配置加载数据源文件的地方),将ignoreUnresolvablePlaceholders的值设为true即可。如,

<bean id="propertyConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:db.properties</value>
</list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>
<!-- 
  这个配置告诉spring,当某个placeholder无法找到时,先不要报错,并尝试用另一个PropertyPlaceholderConfigurer来设置placeholder的值。
-->
原文地址:https://www.cnblogs.com/Marydon20170307/p/6524275.html