从Spring 3升级到Spring 5 - 现在出现自动装配错误

问题描述 投票:2回答:1

有一个项目可以升级Java,weblogic,因为它最终在我们的一个Web应用程序中出现了问题。曾经是java 6,weblogic 10和spring 3.转到java 8,weblogic 12和spring 5。

在编译时遇到很多依赖地狱并且不得不围绕一些折旧的Spring类进行重构我已经有了构建它。

当真正的问题开始时。

部署应用程序时,我收到以下异常。

<02-Apr-2019 10:14:56,294 o'clock IST> <[ACTIVE] ExecuteThread: '92' for queue: 'weblogic.kernel.Default (self-tuning)'> <> <> <37efec1d-3b6b-481e-a623-5c66ebd12f27-0000005d> <1554196496294> <[severity-value: 16] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > ' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@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可以作为autowire候选者。 org.springframework.beans.factory.annotation中的依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true),@ org.springframework.beans.factory.annotation.Qualifier(value = healthPlanCheckoutFunnelStateHolderMapper)} .AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596)org.springframework.beans.factory.anject.InjectionMetadata.inject(InjectionMetadata.java:90)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor) .java:374)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1395)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592)at org。 springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowi reCapableBeanFactory.java:515)org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0(AbstractBeanFactory.java:320)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222 )org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)位于org.springframework.beans的org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)。 org.springframework.context.utext.Context上的org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)中的factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:849)(AbstractApplicationContext.java:AbstractApplicationContext.java: 549)在org.springframework.web的org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:400)。 context.ContextLoader.initWebApplicationContext(ContextLoader.java:291)位于org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)at weblogic.servlet.internal.EventsManager $ FireContextListenerAction.run(EventsManager.java:705) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197)at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java) :203)weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)at weblogic.servlet.internal.EventsManager.executeContextListener(EventsManager.java:251)at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager。 java:204)at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:189)at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:192 1)at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3101),网址为weblogic.servome.Web上的Weblogic.servlet.inpart.Mart.Martle.start(WebAppModule.start:。 :884)at weblogic.application.internal.ExtensibleModuleWrapper $ StartStateChange.next(ExtensibleModuleWrapper.java:360)at weblogic.application.internal.ExtensibleModuleWrapper $ StartStateChange.next(ExtensibleModuleWrapper.java:356)at weblogic.application.utils.StateMachineDriver。 weblogic.application.internal的weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)中的weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:138)中的nextState(StateMachineDriver.java:45) webflowic.application.utils.StateMachineDriver.nextState(StateMach)中的weblogic.application.internal.flow.ModuleStateDriver $ 3.next(ModuleStateDriver.java:228)中的.flow.ModuleStateDriver $ 3.next(ModuleStateDriver.java:233) ineDriver.java:45)at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:78)at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:52)at weblogic.application.internal在weblogic.application .BaseDeployment $ 2.next(BaseDeployment.java:752)在weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)在weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:262) .internal.EarDeployment.activate(EarDeployment.java:66)在weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165)在weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:90)在weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:631)位于weblogic.deploy.inploy.internal.targetserver的weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:171)。 operations.A clogateOperation.doCommit(ActivateOperation.java:121)at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:348)at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:907) at weblogic.deploy.internal.targetserver.DeployService.Dyloy.inget.inget.inget.inget.inget.inget.inget.inget.inget.targetserver.DeployService.Dypatcher.commitmit的weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1468)at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:459) (DeploymentServiceDispatcher.java:181)at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:217)at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access $ 100(DeploymentReceiverCallbackDeliverer.java:14)在weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer $ 2.run(DeploymentReceiverCallback) Deliverer.java:69)在weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:352)的weblogic.work.SelfTuningWorkManagerImpl $ WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:678)中的weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java) :337)at weblogic.work.LartPartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57)at weblogic.work.SartitionUtility.runWorkUnderContext(PartitionUtility.java:41)at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:652)at weblogic .work.ExecuteThread.execute(ExecuteThread.java:420)at weblogic.work.ExecuteThread.run(ExecuteThread.java:360)引发者:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有类型'com.vhi的限定bean .web.common.mappers.FunnelStateHolderMapper'可用:预计至少有1个符合autowire候选资格的bean。依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true),@ org.springframework.beans.factory.annotation.Qualifier(value = healthPlanCheckoutFunnelStateHolderMapper)} org.springframework.beans.factory.support .defaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1654)org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1213)org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java) :1167)org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)org.springframework.beans.factory.anject.InjectionMetadata.inject(InjectionMetadata.java:90)at org。 springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor .java:374)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1395)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592)at org。 springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)位于org.springframework.beans.factory的org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0(AbstractBeanFactory.java:320) .support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory) .java:199)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java) :849)org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)位于org.springframework.web.context的org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)。在weblogic的org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)的org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:291)中的ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:400) .loglet.internal.EventsManager $ FireContextListenerAction.run(EventsManager.java:705)at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java) :197)at weblogic.servlet.provider.WsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSu) bjectHandle.java:71)位于weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent的weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:204)的weblogic.servlet.internal.EventsManager.executeContextListener(EventsManager.java:251) (EventsManager.java:189)在weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1921)在weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3101)在weblogic.servlet.internal.WebAppModule。 startContexts(WebAppModule.java:1843)位于weblogic.applet.internal.WebAppModule.start(WebAppModule.java:884)的weblogic.application.internal.ExtensibleModuleWrapper $ StartStateChange.next(ExtensibleModuleWrapper.java:360)at weblogic.application.internal .ExtensibleModuleWrapper $ StartStateChange.next(ExtensibleModuleWrapper.java:356)在weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)在weblogic.application.internal.ExtensibleModuleWra pper.start(ExtensibleModuleWrapper.java:138)在weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)在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)at weblogic.application.internal.BaseDeployment $ 2.next(BaseDeployment.java:752)at weblogic.application.utils.StateMachineDriver .nextState(StateMachineDriver.java:45)位于weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:262)的weblogic.application.internal.EarDeployment.activate(EarDeployment.java:66)at weblogic.application.internal。 DeploymentStateChecker.activate(DeploymentStateC hecker.java:165)at weblogic.deploy.inget.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:90)at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:631)at weblogic.deploy .internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:171)在weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:121)在weblogic.deploy.internal.targetserver.operations.AbstractOperation .commit(AbstractOperation.java:348)位于weblogic的weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:907)中的weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1468)。 deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:459)位于weblogic.d的weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:181) eploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:217)位于weblogic.deploy.service.internal.targetserver的weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access $ 100(DeploymentReceiverCallbackDeliverer.java:14) .deploymentReceiverCallbackDeliverer $ 2.run(DeploymentReceiverCallbackDeliverer.java:69)at weblogic.work.SelfTuningWorkManagerImpl $ WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:678)at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352)at weblogic.invocation.ComponentInvocationContextManager weblogic.work.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)中的weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57)中的.runAs(ComponentInvocationContextManager.java:337)位于weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl。 java:652)在我们这里weblogic.work.ExecuteThread.run上的blogic.work.ExecuteThread.execute(ExecuteThread.java:420)(ExecuteThread.java:360)

该组件是:

@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);
}

配置中有一个组件扫描,其中包含此代码所在的包。

这在春季3中运行良好,但自从改为春季5以来,这个问题正在发生。我想我可能需要进行一些重构才能使它编译,但是我不这么认为。上述代码所在的文件均未更新。

到目前为止,我还没有更新任何弹簧配置。弹簧3和弹簧5如何搜索组件有区别吗?

java spring weblogic12c weblogic-10.x spring-3
1个回答
0
投票

private FunnelStateHolderMapper<...> funnelStateHolderMapper;

@Component / @Qualifier注释类不同

HealthPlanCheckoutFunnelStateHolderMapper

你不能指望Spring对qaz​​xswpoi会产生编译/运行时错误。


如果@Autowire是层次结构的一部分,请显示。

© www.soinside.com 2019 - 2024. All rights reserved.