2014-09-30 25 views
1

我有一个真实和模拟实现的接口。由于显而易见的原因,模拟实现不在生产类路径中。 我注射用豆:Spring Lazy-init不能使用@Resource注入

@Resource (name="${myClient}") 

我使用Spring MVC和注入到这一个@Controller

在外部配置中,我设置要使用的实际bean名称并将其绑定到'myClient'参数。绑定工作,它试图加载真正的实现,但也失败了我的模拟上的ClassNotFound,虽然标记为lazy-init = true。

我正在使用Spring 4.0.0。

我知道这是预期时起诉@Autowire,但@Resource我不指望它尝试和实例化所有的bean在春天xml。

有什么想法还在继续?

这里是堆栈跟踪:

Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [MyMock] for bean with name 'myClientMock' defined in URL [file:/C:/myProject/target/classes/META-INF/springContext.xml]; nested exception is java.lang.ClassNotFoundException: MyMock1 
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1327) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:594) 
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1396) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:382) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:361) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:347) 
at org.springframework.context.support.AbstractApplicationContext.getBeanNamesForType(AbstractApplicationContext.java:1051) 
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods(AbstractHandlerMethodMapping.java:105) 
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.afterPropertiesSet(AbstractHandlerMethodMapping.java:89) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.afterPropertiesSet(RequestMappingHandlerMapping.java:163) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549) 
+0

可能附加springContext.xml将有助于理解是什么导致此bean创建错误。 – 2014-09-30 07:25:24

+0

这个引用它的任何想法都来自? “MyMock1” – paul 2014-09-30 07:48:14

+0

MyMock1是我的班级名称 – YaOg 2014-09-30 13:09:49

回答

1

我不如果you're使用Spring配置文件知道,但it's什么我们这里使用的初始化每个环境不同的豆类。 从Tomcat我们spcecify哪个配置文件使用,并在春天我们配置这样的东西。

<beans profile="deployed-local"> 
    <util:properties id="propertyConfigurer" location="classpath:app.deployed-performance.properties"/> 
    <context:property-placeholder location="classpath:app.deployed-performance.properties,classpath:app.constants.properties"/> 
    <import resource="spring/jdbc-config-test.xml"/> 
    <import resource="spring/contacts-config-deployed.xml"/> 
    <import resource="spring/security-config-local.xml"/> 
    <import resource="spring/clamAV-service.xml"/> 
    <import resource="spring/document-service.xml"/> 
</beans> 

<beans profile="deployed-prod"> 
    <import resource="spring/jdbc-config.xml"/> 
    <import resource="spring/contacts-config-deployed.xml"/> 
    <import resource="spring/security-config.xml"/> 
    <import resource="spring/clamAV-service.xml"/> 
    <import resource="spring/document-service.xml"/> 
</beans> 
+0

虽然这可能会起作用,但是它不是Spring初始化我的bean的错误,尽管它不应该这样做?问题的根源似乎来自这里: – YaOg 2014-09-30 08:12:22

+0

我认为这不是Spring实现的问题。我为你提供这个选择,因为我认为它更清晰和优雅。 – paul 2014-09-30 08:17:38