簡體   English   中英

從Spring 3升級到Spring 5-現在自動裝配錯誤

[英]Upgraded from Spring 3 to Spring 5 - and now errors with autowiring

有一個項目可以升級Java,weblogic,最終在我們的一個Web應用程序中產生了春天。 以前是Java 6,weblogic 10和spring3。轉移到java 8,weblogic 12和spring 5。

在編譯時經歷了很多依賴之后,不得不圍繞一些折舊的spring類進行重構之后,我才開始構建它。

而這是真正的問題開始的時候。

部署應用程序時,出現以下異常。

<2019年4月2日10:14:56,294 IST>> [[ACTIVE] ExecuteThread:'92'for queue:'weblogic.kernel.Default(self-tuning)'> <> <> <37efec1d-3b6b- 481e-a623-5c66ebd12f27-0000005d> <1554196496294> <[嚴重性值:16] [rid:0] [partition-id:0] [partition-name:DOMAIN]>'可用:期望至少有1個符合以下條件的bean自動接線候選。 依賴項注釋:{@ org.springframework.beans.factory.annotation.Autowired(required = true),@ org.springframework.beans.factory.annotation.Qualifier(value = healthPlanCheckoutFunnelStateHolderMapper)}。

org.springframework.beans.factory.UnsatisfiedDependencyException:創建名稱為'findAPlanCheckoutController'的bean時出錯:通過字段'funnelStateHolderMapper'表示的不滿足的依賴關系; 嵌套的異常是org.springframework.beans.factory.NoSuchBeanDefinitionException:沒有類型為'com.vhi.web.common.mappers.FunnelStateHolderMapper'的合格Bean:應該至少有1個符合自動裝配候選條件的bean。 依賴項注釋:{@ org.springframework.beans.factory.annotation.Autowired(required = true),@ org.springframework.beans.factory.annotation.Qualifier(value = healthPlanCheckoutFunnelStateHolderMapper)}在org.springframework.beans.factory.annotation .org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90)的org.springframework.beans.factory.Annotation.ProwiredProcess。 .java:374),位於org.org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1395),位於org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592)。 springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowi reCapableBeanFactory.java:515)在org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0(AbstractBeanFactory.java:320)在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ),位於org.springframework.beans的org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)的org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)處。 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)的factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:849)在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java: 549),位於org.springframework.web的org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:400)。 在org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)處的context.ContextLoader.initWebApplicationContext(ContextLoader.java:291)在weblogic.servlet.internal.EventsManager $ FireContextListenerAction.run(EventsManager.java:705)位於weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)位於weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197)位於weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java) :203)在weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)在weblogic.servlet.internal.EventsManager.executeContextListener(EventsManager.java:251)在weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager。 weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:189)上的java:204)weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:192)上的java:204) 1)在weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3101)在weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1843)在weblogic.servlet.internal.WebAppModule.start(WebAppModule.java) :884),位於weblogic.application.internal.ExtensibleModuleWrapper $ StartStateChange.next(ExtensibleModuleWrapper.java:360),位於weblogic.application.internal.ExtensibleModuleWrapper $ StartStateChange.next(ExtensibleModuleWrapper.java:356),位於weblogic.application.utils.StateMachineDriver。 weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:138)的nextState(StateMachineDriver.java:45)weblogic.application.internal的weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)的nextState(StateMachineDriver.java:45) weblogic.application.internal.flow.ModuleStateDriver $ 3.next(ModuleStateDriver.java:228)上的.flow.ModuleStateDriver $ 3.next(ModuleStateDriver.java:233)在weblogic.application.utils.StateMachineDriver.nextState(StateMach) ineDriver.java:45)位於weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:78)位於weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:52)位於weblogic.application.internal位於weblogic.application.utils.StateMachineDriver的.BaseDeployment $ 2.next(BaseDeployment.java:752),位於weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:262)的nextState(StateMachineDriver.java:45)位於weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165)處的.internal.EarDeployment.activate(EarDeployment.java:66)位於weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:90)處weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:171)處的weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:631),位於weblogic.deploy.internal.targetserver處。 operations.A weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:348)上的ctivateOperation.doCommit(ActivateOperation.java:121)在weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:907)上在weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1468)在weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:459)在weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit (weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:217)上的(DeploymentServiceDispatcher.java:181)在weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access $ 100(DeploymentReceiverCallbackjava。在weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer $ 2.run(DeploymentReceiverCallback Weblogic.work.SelfTuningWorkManagerImpl $ WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:678)的Deliverer.java:69)weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352)的weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java :337),位於weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57),位於weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41),位於weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:652) weblogic.work.ExecuteThread.run(ExecuteThread.java:360)上的.work.ExecuteThread.execute(ExecuteThread.java:420)原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:沒有類型為com.vhi的合格bean .web.common.mappers.FunnelStateHolderMapper'可用:期望至少有1個有資格作為自動裝配候選者的bean。 依賴項注釋:{@ org.springframework.beans.factory.annotation.Autowired(required = true),@ org.springframework.beans.factory.annotation.Qualifier(value = healthPlanCheckoutFunnelStateHolderMapper)}在org.springframework.beans.factory.support在org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1213)的.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1654)在org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(java :1167),位於org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90)處,位於org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)處。 springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor .java:374),位於org.org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1395),位於org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592)。 springorgwork.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)在org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0(AbstractBeanFactory.java:320)在org.springframework.beans.factory org.springframework.beans.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)上的.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)在org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory .java:199),位於org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java :849),位於org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877),位於org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549),位於org.springframework.web.context。 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:291)位於org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)處的ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:400)位於weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)上的.servlet.internal.EventsManager $ FireContextListenerAction.run(EventsManager.java:705)位於weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java) :197),位於weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203),位於weblogic.servlet.provider.WlsSubjectHandle.run(WlsSu 在weblogic.servlet.internal.EventsManager.executeContextListener(EventsManager.java:251)在weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:204)在weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent在bjectHandle.java:71) (EventsManager.java:189)位於weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1921)位於weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3101)位於weblogic.servlet.internal.WebAppModule。位於weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:884)處的startContexts(WebAppModule.java:1843)位於weblogic.application.internal處的weblogic.application.internal.ExtensibleModuleWrapper $ StartStateChange.next(ExtensibleModuleWrapper.java:360)處的startContexts(WebAppModule.java:884)在weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)處的.ExtensibleModuleWrapper $ StartStateChange.next(ExtensibleModuleWrapper.java:356)在weblogic.application.internal.ExtensibleModuleWra處 位於weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)的pper.start(ExtensibleModuleWrapper.java:138)位於weblogic.application.internal.flow.ModuleStateDriver $ 3.next(ModuleStateDriver.java:233)處weblogic.application.internal.flow.ModuleStateDriver $ 3.next(ModuleStateDriver.java:228)at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver .java:78),位於weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:52),位於weblogic.application.internal.BaseDeployment $ 2.next(BaseDeployment.java:752),位於weblogic.application.utils.StateMachineDriver位於weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:262)的.nextState(StateMachineDriver.java:45)位於weblogic.application.internal.EarDeployment.activate(EarDeployment.java:66)的weblogic.application.internal。 DeploymentStateChecker.activate(DeploymentStateC hecker.java:165),位於weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:90),位於weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:631),位於weblogic.deploy weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:121)上的.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:171),位於weblogic.deploy.internal.targetserver.operations.AbstractOperation weblogic上的.commit(AbstractOperation.java:348)在weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:907)在weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1468)在weblogic。 weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:181)上的deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:459)在weblogic.d 位於weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access $ 100(DeploymentReceiverCallbackDeliverer.java:14)的eploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:217)在weblogic.deploy。在Weblogic.work.SelfTuningWorkManagerImpl $ WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:678)在Weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352。 weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57)的.runAs(ComponentInvocationContextManager.java:337)在weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.runWorkUnderContext。 java:652) weblogic.work.ExecuteThread.run(ExecuteThread.java:360)上的blogic.work.ExecuteThread.execute(ExecuteThread.java:420)

該組件是:

@Component
@Qualifier("healthPlanCheckoutFunnelStateHolderMapper")
public class HealthPlanCheckoutFunnelStateHolderMapper extends CommonHealthCheckoutFunnelStateHolderMapper<HealthPlanCheckoutBean>
{
    @Override
    protected HealthPlanCheckoutBean createBean() {
        return new HealthPlanCheckoutBean();
    }
}

該組件的自動裝配為:

@Autowired
@Qualifier("healthPlanCheckoutFunnelStateHolderMapper")
private FunnelStateHolderMapper<HealthPlanCheckoutBean, HealthPlanFunnelStateHolder> funnelStateHolderMapper;

FunnelStateHolderMapper接口

/**
 * Interface defines methods for mapping to and from a {@link FunnelStateHolder}. This is the top level mapper that
 * should be used by each controller for handling GET and POST requests. The implementation may delegate to other
 * underlying mappers but this should always be the interface to which the controller talks.
 */
public interface FunnelStateHolderMapper<B, F extends FunnelStateHolder> {

    B toScreenBean(F funnelStateHolder);

    F fromScreenBean(F funnelStateHolder, B screenBean);
}

配置中有一個組件掃描,其中包含此代碼所在的軟件包。

這在Spring 3上運行良好,但是由於更改為Spring 5,因此出現了此問題。 我想可能是我必須進行一些重構才能使其編譯引起此問題的原因,但我認為並非如此。 以上代碼所在的文件均未更新。

到目前為止,我還沒有更新任何spring配置。 Spring 3和Spring 5搜索零件的方式有所不同嗎?

private FunnelStateHolderMapper<...> funnelStateHolderMapper;

同類型的的@Component / @Qualifier注解的類

HealthPlanCheckoutFunnelStateHolderMapper

您不能期望Spring使用@Autowire會引發編譯/運行時錯誤的東西


如果HealthPlanCheckoutFunnelStateHolderMapper是層次結構的一部分,請顯示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM