问题描述
@H_404_0@我正在使用Spring(5.2.6.RELEASE),Tomcat(8.5.29)和Apache CXF(3.3.6)开发Web应用程序。在集成测试中(使用JUnit 4.13),Spring的隐式构造函数注入效果很好,但是当我将Web应用程序部署到活动的Tomcat服务器时,会收到如下错误消息:
[...] Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'foo.bar.UserService#35fa8149' defined in ServletContext resource [/WEB-INF/context.xml]: Instantiation of bean Failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [foo.bar.UserService]: No default constructor found; nested exception is java.lang.NoSuchMethodException: foo.bar.UserService.<init>()
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.instantiateBean(AbstractAutowireCapablebeanfactory.java:1320) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBeanInstance(AbstractAutowireCapablebeanfactory.java:1214) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.doCreateBean(AbstractAutowireCapablebeanfactory.java:557) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBean(AbstractAutowireCapablebeanfactory.java:517) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.beans.factory.support.BeanDeFinitionValueResolver.resolveInnerBean(BeanDeFinitionValueResolver.java:374) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
... 30 more
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [foo.bar.UserService]: No default constructor found; nested exception is java.lang.NoSuchMethodException: foo.bar.UserService.<init>()
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:83) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.instantiateBean(AbstractAutowireCapablebeanfactory.java:1312) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBeanInstance(AbstractAutowireCapablebeanfactory.java:1214) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.doCreateBean(AbstractAutowireCapablebeanfactory.java:557) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBean(AbstractAutowireCapablebeanfactory.java:517) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.beans.factory.support.BeanDeFinitionValueResolver.resolveInnerBean(BeanDeFinitionValueResolver.java:374) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
... 30 more
Caused by: java.lang.NoSuchMethodException: foo.bar.UserService.<init>()
at java.lang.class.getConstructor0(Class.java:3082) ~[?:1.8.0_252]
at java.lang.class.getDeclaredConstructor(Class.java:2178) ~[?:1.8.0_252]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:78) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.instantiateBean(AbstractAutowireCapablebeanfactory.java:1312) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBeanInstance(AbstractAutowireCapablebeanfactory.java:1214) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.doCreateBean(AbstractAutowireCapablebeanfactory.java:557) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBean(AbstractAutowireCapablebeanfactory.java:517) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.beans.factory.support.BeanDeFinitionValueResolver.resolveInnerBean(BeanDeFinitionValueResolver.java:374) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
... 30 more
@H_404_0@有人知道我在做什么错吗?我没有在任何代码中使用@Autowired批注,但是在集成测试代码中使用了它-会有所作为吗?
@H_404_0@ 编辑:以下是“生产”和“集成测试”上下文XML文件:
@H_404_0@“生产”:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">
<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="environment">
<bean class="org.springframework.web.context.support.StandardServletEnvironment"/>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
[...]
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerfactorybean">
[...]
</bean>
<jdbc:initialize-database data-source="dataSource" enabled="true">
[...]
</jdbc:initialize-database>
<jaxrs:server address="/">
<jaxrs:providers>
<bean class="com.fasterxml.jackson.jaxrs.json.JacksonjsonProvider">
<constructor-arg>
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperfactorybean"/>
</constructor-arg>
</bean>
[other providers omitted]
</jaxrs:providers>
<jaxrs:serviceBeans>
<bean class="foo.bar.UserService">
<constructor-arg ref="entityManagerFactory"/>
[...]
</bean>
[other service beans omitted]
</jaxrs:serviceBeans>
</jaxrs:server>
</beans>
@H_404_0@“集成测试”:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xmlns:jaxrs-client="http://cxf.apache.org/jaxrs-client"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://cxf.apache.org/jaxrs-client http://cxf.apache.org/schemas/jaxrs-client.xsd">
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerfactorybean">
<property name="dataSource">
<bean class="org.apache.commons.dbcp2.BasicDataSource">
[...]
</bean>
</property>
[...]
</bean>
[test classes omitted]
<bean id="jsonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonjsonProvider">
<constructor-arg>
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperfactorybean"/>
</constructor-arg>
</bean>
<jaxrs:server address="local://api">
<jaxrs:providers>
<ref bean="jsonProvider"/>
[other providers omitted]
</jaxrs:providers>
<jaxrs:serviceBeans>
<bean class="foo.bar.UserService"/>
[other service beans omitted]
</jaxrs:serviceBeans>
</jaxrs:server>
<jaxrs-client:client id="webClient" address="local://api" serviceClass="org.apache.cxf.jaxrs.client.WebClient">
<jaxrs-client:providers>
<ref bean="jsonProvider"/>
</jaxrs-client:providers>
<jaxrs-client:headers>
<entry key="Content-Type" value="application/json"/>
</jaxrs-client:headers>
</jaxrs-client:client>
</beans>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)