天道酬勤,学无止境

Spring Autowire with Bean creation in same class results in :Requested bean is currently in creation Error*

问题

我知道该错误是不言自明的,但是当我将其余模板的设置从构造函数中删除到 @Autowired @Qualifier("myRestTemplate") private RestTemplate restTemplate 时,它​​可以工作。

只是想知道如果同一个类具有我要自动装配的 bean 定义,我该如何在构造函数中执行此操作?

org.springframework.beans.factory.BeanCurrentlyInCreationException:创建名为“xxx”的bean时出错:请求的bean当前正在创建中:是否存在无法解析的循环引用?

@Component
public class xxx {

 private RestTemplate restTemplate;

 @Autowired
 public xxx(@Qualifier("myRestTemplate") RestTemplate restTemplate) {
   this.restTemplate = restTemplate;
 }

 @Bean(name="myRestTemplate")
 public RestTemplate getRestTemplate() {
    return new RestTemplate();
 }

}
回答1

常规@Component注释类中的 @Bean 方法以所谓的lite-mode处理。

我不知道你为什么要这样做。 如果您的xxx类控制RestTemplate的实例化,则没有太多理由不在构造函数中自己执行此操作(除非您打算将其暴露给上下文的其余部分,但有更好的解决方案)。

无论如何,为了让 Spring 调用您的getRestTemplate工厂方法,它需要一个xxx实例。 要创建xxx的实例,它需要调用其构造函数,该构造函数需要一个RestTemplate ,但您的RestTemplate目前正在构建中。

您可以通过将getRestTemplate static来避免此错误。

@Bean(name="myRestTemplate")
public static RestTemplate getRestTemplate() {
    return new RestTemplate();
}

在这种情况下,Spring 不需要xxx实例来调用getRestTemplate工厂方法。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Spring Autowire with Bean creation in same class results in :Requested bean is currently in creation Error*
    I know the error is self explanatory, but when I remove the setting of rest template from constructor to @Autowired @Qualifier("myRestTemplate") private RestTemplate restTemplate, it works. Just want to know how can I do that in constructor if the same class has bean definition of what I am trying to autowire? org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'xxx': Requested bean is currently in creation: Is there an unresolvable circular reference? @Component public class xxx { private RestTemplate restTemplate; @Autowired public xxx(@Qualifier
  • spring笔记(一)
    1. 回顾Struts与Hibernate可以做什么事?Struts,Mvc中控制层解决方案 可以进行请求数据自动封装、类型转换、文件上传、效验…Hibernate, 持久层的解决方案; 可以做到,把对象保存到数据库, 从数据库中取出的是对象。 传统的开发模式基于mvc模式进行项目开发;基于mvc的项目框架结构:Entity / dao / service / action // 1. 实体类class User{} //2. daoclass UserDao{ .. 访问db} //3. serviceclass UserService{ UserDao userDao = new UserDao();} //4. actionclass UserAction{ UserService userService = new UserService(); .. 拿到数据或结果} 用户访问:/user.action ----> Tomcat (服务器创建Action、Service、dao 思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action 多个 【维护成员变量】 service 一个 【不需要维护公共变量】 dao 一个 【不需要维护公共变量】 创建时间 action 访问时候创建 service 启动时候创建 dao 启动时候创建 3. 对象的依赖关系
  • 如何将 mongoTemplate 自动连接到自定义类型转换器?(How to autowire mongoTemplate into custom type converter?)
    问题 我正在尝试创建一个转换器,它将通过它的 ObjectId 从 DB 获取对象。 但是 mongoTemplate 在转换器中始终为空: org.springframework.core.convert.ConversionFailedException: 无法从类型 org.bson.types.ObjectId 转换为类型 com.atlas.mymodule.datadomain.MyObject 的值“130000000000000000000013”; 嵌套异常是 java.lang.NullPointerException 代码: @Component public class ObjectIdToMyObjectConverter implements Converter<ObjectId, MyObject> { @Autowired private MongoTemplate mongoTemplate; // null ??? public MyObject convert(ObjectId objectId) { return mongoTemplate.findById(objectId, MyObject.class); // <- NullPointerException } } 配置: @Configuration @ComponentScan
  • Spring Data JPA - injection fails - BeanCreationException: Could not autowire field
    i followed the tutorial posted here to get a basis application to work with Spring Data JPA. Now, how i understood, using the configuration <jpa:repositories base-package="my.package.to.scan" /> should result in that package beeing scanned by Spring Data JPA for interfaces extending JpaRepository and create a concreate bean of it so it can be used anywhere in my service classes using simple Spring @Autowired. But it fails, saying it can't find a bean with className (which is the default name the bean gets when created, simply using the de-capitalized ClassName). However, when i configure the
  • 无法自动装配字段:私有 org.springframework.security.authentication.AuthenticationManager(Could not autowire field: private org.springframework.security.authentication.AuthenticationManager)
    问题
  • Spring Data JPA-注入失败-BeanCreationException:无法自动装配字段(Spring Data JPA - injection fails - BeanCreationException: Could not autowire field)
    问题 我遵循了此处发布的教程,以获取可与Spring Data JPA一起使用的基础应用程序。 现在,我如何理解,使用配置 <jpa:repositories base-package="my.package.to.scan" /> 应该会导致该包JpaRepository被Spring Data JPA扫描以获取扩展JpaRepository接口并创建一个JpaRepository bean,以便可以使用简单的Spring @Autowired在我的服务类中的任何位置使用它。 但是它失败了,说它找不到具有className的bean(这是创建时仅使用去大写字母的ClassName所获得的默认名称)。 但是,当我像这样在我的applicationContext中手动配置bean时: <bean id="ClassName" class="my.package.to.scan.ClassName"/> Spring能够找到bean。 然后我当然会得到一个错误,因为我想从一个接口创建一个bean,这显然是行不通的。 但关键是,似乎Spring Data JPA“自动bean创建”似乎以某种方式失败了。 我附上了相关代码,因此您可以看一下。 顺便说一句,我应该提到我正在开发一个Portlet,所以不要奇怪为什么我没有spring-config。
  • Spring Security: Can't Autowire my UserDetailService to AuthenticationProvider for BCrypt integration
    I'm trying to create a very simple login functionality for my app with Spring Security: User registers, username and BCrypt encrypted password are saved to a database, user enters credentials, custom UserDetailsService gets username and encrypted password from the database, login complete. The base project was created with Spring Initializr and is using Maven. It worked after following the most basic tutorial, with no database and only one hardcoded user, but when I added encryption, the problems started. My problem is that I can't get the Authentication Provider to use BCrypt and my custom
  • Could not autowire field: private org.springframework.security.authentication.AuthenticationManager
    I'm trying to create OAuth2 Server Provider using this tutorial Spring OAuth2 . The main difference between example and my project - I do not use Spring Boot. I try to split this classes (GitHub example link) I created 2 classes: @Configuration @Order(-20) @EnableResourceServer public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private AuthenticationManager authenticationManager; @Override protected void configure(HttpSecurity http) throws Exception { http.formLogin().loginPage("/login").permitAll() .and() .requestMatchers().antMatchers("/login", "/oauth/authorize
  • Spring——bean作用域和自动装配
    文章目录 Spring——bean作用域和自动装配1、bean作用域1、singleton 作用域2、prototype 作用域 2、bean的自动装配3、使用注解实现自动装配1)@Component2)@Repository3)@Service4)@Controller5)@Autowired6)@Qualifier7)@Resource Spring——bean作用域和自动装配 Spring 容器在初始化一个 Bean 的实例时,同时会指定该实例的作用域。 ScopeDescriptionsingleton(常用)单例模式,使用 singleton 定义的 Bean 在 Spring 容器中只有一个实例,这也是 Bean 默认的作用域。prototype(常用)原型模式,每次通过 Spring 容器获取 prototype 定义的 Bean 时,容器都将创建一个新的 Bean 实例。request在一次 HTTP 请求中,容器会返回该 Bean 的同一个实例。而对不同的 HTTP 请求,会返回不同的实例,该作用域仅在当前 HTTP Request 内有效。session在一次 HTTP Session 中,容器会返回该 Bean 的同一个实例。而对不同的 HTTP 请求,会返回不同的实例,该作用域仅在当前 HTTP Session 内有效。application将单个 bean
  • 如何在 Spring 中按类型创建 bean?(How to create a bean by type in Spring?)
    问题
  • 图文并茂,揭秘 Spring 的 Bean 的加载过程
    文章目录 1. 概述2. 总体流程3. 细节分析3.1. 转化 BeanName3.2. 合并 RootBeanDefinition3.3. 处理循环依赖3.3.1. 原型模式的循环依赖3.3.2. 单例模式的构造循环依赖3.3.3. 单例模式的设值循环依赖 3.4. 创建实例3.5. 注入属性3.6. 初始化3.6.1. 触发 Aware3.6.2. 触发 BeanPostProcessor3.6.3. 触发自定义 init 3.7. 类型转换 4. 总结 1. 概述 Spring 作为 Ioc 框架,实现了依赖注入,由一个中心化的 Bean 工厂来负责各个 Bean 的实例化和依赖管理。各个 Bean 可以不需要关心各自的复杂的创建过程,达到了很好的解耦效果。 我们对 Spring 的工作流进行一个粗略的概括,主要为两大环节: 解析,读 xml 配置,扫描类文件,从配置或者注解中获取 Bean 的定义信息,注册一些扩展功能。 加载,通过解析完的定义信息获取 Bean 实例。 Spring总体流程 我们假设所有的配置和扩展类都已经装载到了 ApplicationContext 中,然后具体的分析一下 Bean 的加载流程。 思考一个问题,抛开 Spring 框架的实现,假设我们手头上已经有一套完整的 Bean Definition Map,然后指定一个 beanName
  • Autowire 在黄瓜 Step Def 测试中失败(Autowire failed in cucumber Step Def test)
    问题
  • Spring creating multiple instances of a singleton?
    I have a graph of Spring beans which autowire each other. Heavily simplified illustration: <context:annotation-config/> <bean class="Foo"/> <bean class="Bar"/> <bean class="Baz"/> ... public class Foo { @Autowired Bar bar; @Autowired Baz baz; } public class Bar { @Autowired Foo foo; } public class Baz { @Autowired Foo foo; } All of these beans don't have scope specified which imply they are singletons (making them explicit singletons doesn't change anything, I've tried). The problem is that after the instantiation of a single application context, instances of Bar and Baz contain different
  • 无法在春季自动接线现场。 为什么?(Could not autowire field in spring. why?)
    问题 我不断收到此错误,无法弄清原因。是的,我知道很多人都有类似的问题,但是阅读他们得到的答案并不能解决我的问题。 org.springframework.beans.factory.BeanCreationException:创建名称为“ contactController”的bean时出错:自动连接依赖项的注入失败; 嵌套的异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有net.service.ContactService net.controller.ContactController.contactService; 嵌套的异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到依赖项类型为[net.service.ContactService]的匹配bean:期望至少有1个bean可以作为此依赖项的自动装配候选。 依赖项注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)} 这是控制器: @Controller @SessionAttributes public class
  • Spring 学习笔记
    Spring Node 概述 目的: 解决企业应用开发的复杂性功能: 使用基本的JavaBean代替EJB(Enterprise Service Bus,), 并提供更多的企业应用功能 ESB提供了连接企业内部及跨企业间新的和现有软件应用程序的功能,以一组丰富的功能启用管理和监控应用程序之间的交互。 范围: 任何范围的Java应用 特性 非嵌入式: 基于Spring开发的应用中的对象可以不依赖Spring的API控制反转(Ioc): 对象由Spring去创建, 不需要程序员去new依赖注入(DI): 依赖的对象不需要手动调用setXXX()方法去设置, 而是通过配置赋值面向切面(AOP)Spring是一个容器, 其包含并且管理应用对象的生命周期组件化: Spring可以实现使用简单的组件配置组合成衣蛾复杂的应用一站式: 在IoC和AOP的基础上可以整合各种企业应用的开源框架和第三方类库 总结: Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架 三层架构 表现层 --> web层 (MVC是表现层的一个设计模型)业务层 --> service层持久层 --> dao层 体系结构 核心容器 核心容器由 spring-core,spring-beans,spring-context,spring-context-support和spring-expression
  • @Bean 注解
    @Bean 注解全解析 随着SpringBoot的流行,基于注解式开发的热潮逐渐覆盖了基于XML纯配置的开发,而作为Spring中最核心的bean当然也能够使用注解的方式进行表示。所以本篇就来详细的讨论一下作为Spring中的Bean到底都有哪些用法。 @Bean 基础声明 Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。 SpringIOC 容器管理一个或者多个bean,这些bean都需要在@Configuration注解下进行创建,在一个方法上使用@Bean注解就表明这个方法需要交给Spring进行管理。 快速搭建一个maven项目并配置好所需要的Spring 依赖 复制代码 org.springframework spring-context 4.3.13.RELEASE org.springframework spring-beans 4.3.13.RELEASE org.springframework spring-core 4.3.13.RELEASE org.springframework spring-web 4.3.13.RELEASE 复制代码
  • Day38——Spring学习笔记1
    Spring初识 文章目录 Spring初识1 认识2 IOC基础初识案例:IOC本质 3 HelloSpring4 IOC创建对象的方式5 Spring配置6 属性注入7 自动装配Spring 自动装配 ‘byName’Spring 自动装配 ‘byType’基于注解的配置[@Autowired][@Resource] 8 使用注解开发使用Java的方式配置Spring 1 认识 Spring:给软件行业带来春天 现在的java 开发,说白了就是基于Spring的 Spring目的:解决企业应用开发的复杂性 现在学习Spring,为了之后学习SpringMVC,SpringBoot作为基础 核心:Spring中的IOC与AOP 学习之地: 官网:http://spring.io/Spring的学习文档,API文档GitHub:https://github.com/spring-projects/spring-framework 2 IOC基础 IOC:控制反转(一种思想) 初识案例: UserMapper 接口 UserMapperImpl 实现类 UserService 业务接口 UserServiceImpl 业务实现类 首先建立一个UserMapper的接口,里面写入一方法: public interface UserMapper { public void getUser
  • Spring5 学习笔记5
    IOC操作Bean管理(FactoryBean) 1.Spring有两种类型bean,一种普通bean,另外一种是工厂bean 2.普通bean:在配置文件中,定义的bean类型就是返回类型 3.工厂bean:在配置文件中定义bean类型可以和返回类型不一样 第一步:创建类,让这个类作为工厂bean,实现接口FactoryBean 第二步:实现接口里面的方法,在实现的方法中定义返回的bean类型 此中定义的返回类型为course public class MyBean implements FactoryBean<Course> { //定义返回bean @Override public Course getObject() throws Exception { Course course = new Course(); course.setCname("abc"); return course; } @Override public Class<?> getObjectType() { return null; } @Override public boolean isSingleton() { return false; } } 配置文件 此中定义的类型为mybean <bean id="myBean" class="com.wz.spring5.collectiontype
  • spring中的自动装配
    目录 什么是自动装配什么是依赖注入依赖注入与自动装配的关系自动装配的策略`byName``byType``constructor``autodetect`(不推荐使用了)默认的自动装配策略 `Autowired` 注解强制性装配策略主和优先级 `@Autowired` 与 `@Resource` 的区别 什么是自动装配 自动装配:就是 spring 会在容器中自动的查找,并自动的给 bean 装配及其关联的属性 涉及到自动装配 bean 的依赖关系时,spring 有多种处理方式。spring 提供了 4 种自动装配策略 public interface AutowireCapableBeanFactory extends BeanFactory { // 无需自动装配 int AUTOWIRE_NO = 0; // 按名称自动装配 bean 属性 int AUTOWIRE_BY_NAME = 1; // 按类型自动装配 bean 属性 int AUTOWIRE_BY_TYPE = 2; // 按构造器自动装配 int AUTOWIRE_CONSTRUCTOR = 3; // 过时方法,Spring3.0 之后不再支持 @Deprecated int AUTOWIRE_AUTODETECT = 4; } 什么是依赖注入 依赖注入:当一个类的实例需要另一个类的实例协助时
  • 在 Spring 中动态定义要自动装配的 bean(使用限定符)(Dynamically defining which bean to autowire in Spring (using qualifiers))
    问题