spring項目
運作本地testcase,發現無法啟動程式,報如下錯誤:
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bossAccAndTransModifyController': Injection of resource dependencies failed;
nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'TPlatOrderServiceImpl':
Unsatisfied dependency expressed through field 'tLimitAddService':
Bean named 'TLimitAddServiceImpl' is expected to be of type [com.cn.yft.ora.service.impl.TLimitAddServiceImpl]
but was actually of type [com.sun.proxy.$Proxy43];
nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException:
Bean named 'TLimitAddServiceImpl' is expected to be of type [com.cn.yft.ora.service.impl.TLimitAddServiceImpl]
but was actually of type [com.sun.proxy.$Proxy43]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:321)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
...
我們看其中的nest exception資訊:
org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'TLimitAddServiceImpl' is expected to be of type [com.cn.yft.ora.service.impl.TLimitAddServiceImpl] but was actually of type [com.sun.proxy.$Proxy43]
造成這個錯誤的原因是方法上使用了spring的聲明式事務注解@Transactional。
需在spring application context.xml檔案裡指定
<aop:aspectj-autoproxy poxy-target-class="true"/>
xml頭部引入
xmlns:aop="http://www.springframework.org/schema/aop"
接下再來運作testcase, 發現仍然無法啟動,出現新的錯誤:
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 26 in XML document from class path resource [spring-mvc.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 26; columnNumber: 55; cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'aop:aspectj-autoproxy'.
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:399)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
...
我們看其中的nest exception資訊:
The matching wildcard is strict, but no declaration can be found for element 'aop:aspectj-autoproxy'.
原因是schemaLocation缺少AOP相關的XSD配置,在XML檔案新增AOP配置。
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
接下再來運作testcase, 發現仍然無法啟動,出現新的錯誤:
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.config.internalAutoProxyCreator': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Around
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1105)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1050)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
...
或者
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bossAccAndTransModifyController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TAccTransServiceImpl' defined in file [D:\***\tax_pay_ext\tax-pay-ext-trans\trans-core\target\classes\com\cn\yft\ora\service\impl\TAccTransServiceImpl.class]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/util/PartialOrder$PartialComparable
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:321)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
...
我們看其中的nest exception資訊都是java.lang.NoClassDefFoundError:
nested exception is java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Around
nested exception is java.lang.NoClassDefFoundError: org/aspectj/util/PartialOrder$PartialComparable
NoClassDefFoundError顧名思義就是缺少相關依賴。除了spring-aop依賴以外,還缺少aspectj的依賴
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>