EXCEPTION-SPRING

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

聲明:異常類文章主要是記錄了我遇到的異常信息及解決方案,解決方案大部分都是百度解決的,(這裏只是針對我遇到的作個彙總),特此聲明!
異常一(Aop異常)spring

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異常)app

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中增長以下配置:url

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

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

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便可。如,code

<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的值。
-->
相關文章
相關標籤/搜索