java版“1.8.0_121”请求的bean目前正在创建:是否存在无法解析的循环引用?

时间:2017-04-25 14:56:42

标签: java-8 spring-bean

当我构建和部署基于Spring的应用程序时 java版“1.8.0_112”它可以编译和部署。

另外,如果我使用 java版本“1.8.0_121”进行编译,并使用 java版“1.8.0_112”也有效。

但是当我编译和部署相同的应用程序时 java版“1.8.0_121”
它给了我一个服务的错误:

Error creating bean with name 'namesServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private a.b.c.backend.services.account.PersonService a.b.c.backend.services.serviceimpl.NamesServiceImpl.personService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'CISExpressionHandler' defined in URL

[jar:file:/usr/local/tomcat7-7/webapps/ServicesApp/WEB-INF/lib/E2Services.jar!/META-INF/spring/applicationContext-security.xml]: Cannot resolve reference to bean 'CISPermissionEvaluator' while setting bean property 'permissionEvaluator'; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'CISPermissionEvaluator': Requested bean is currently in creation: Is there an unresolvable circular reference?

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private a.b.c.backend.services.ciscase.CaseService a.b.c.backend.services.security.permissionEvaluators.CaseOwnerPermission.caseService; nested exception is org.springframework.beans.factory.BeanCreationException

我能找到的一个解释是:

异常可能发生也可能不发生取决于bean的创建顺序。我们在web.xml中使用下面的配置加载它们 (/usr/local/tomcat7-7/webapps/ServicesApp/WEB-INF/web.xml)

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
  </context-param>

XML文件将由XmlWebApplicationContext类加载,并且不保证文件的加载顺序。 它只是从文件系统加载文件。问题出在这里。 如果类首先加载应用程序上下文文件,则没有问题,因为当bean用于Spring Security的构造注入时已经创建了bean。但是,如果它首先加载Spring Security上下文文件,则会出现循环引用问题,因为Spring会在创建之前尝试在构造函数注入中使用bean。

如何解决问题?

强制xml文件的加载顺序。使用

在应用程序上下文文件的末尾加载安全上下文xml文件
<import resource="applicationContext-security.xml">. 

现在JDK版本更改如何引入?我对此没有解释

参考:Splitting applicationContext to multiple files

问:我如何在部署时获得bean的顺序?

0 个答案:

没有答案