当前位置: 首页 > 知识库问答 >
问题:

当@autowired和@bean存在于同一类中时,BeanCurrentlyInCreationException

慕容越泽
2023-03-14
@Configuration
public class Test1 {

    @Autowired
    private Test3 test3;

}

@Configuration
public class Test2 {

    @Autowired
    private Test3 test3;

    @Bean(name = "test3 ")
    Test3 test3 () {
        return new Test3(); 
    }
}

上面的代码给出了以下错误。

原因:org.springframework.beans.factory.BeanCreationException:创建名为“test1”的bean时出错:注入autowired依赖项失败;嵌套异常为org.springframework.beans.factory.beanCreationException:无法自动连接字段:private Test3 com.package.name.test1.Test3;

嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“test2”的bean时出错:注入autowired依赖项失败;嵌套异常为org.springframework.beans.factory.beanCreationException:无法自动连接字段:private Test3 com.package.name.test2.Test3;

嵌套异常为org.springframework.beans.factory.beanCurrentlyIncreationException:创建名为“test3”的bean时出错:请求的bean当前正在创建中:是否存在不可解析的循环引用?

这是一个循环依赖的例子吗?如果是的话,关于解决这个问题的任何想法。

共有1个答案

卢普松
2023-03-14

您不需要自动连接同一个类中定义的bean,因为您可以通过调用初始化方法test3()直接引用该bean。

@Configuration
public class Test2{

    @Bean(name = "test3 ")
    Test3 test3 () {
        return new Test3(); 
    }

    public void exampleOfUsingTest3Bean() {
        System.out.println("My test3 bean is" + test3().toString());
    }
}

而且,实际上,您不应该做您试图做的事情,因为@AutoWired字段在类的构造时被注入到类中,此时不存在名为Test3的bean,因为它是由正在构造的类的方法定义的。理论上,您可以将这个@bean方法定义为静态的,它应该可用于autowire,但不应该这样做。

@Bean(name = "test3 ")
public static Test3 test3 () {
    return new Test3(); 
}
 类似资料:
  • 问题内容: 我在应用服务器上运行了多个Web应用,每个Web应用WAR文件都包含同一jar文件的副本。 这是否意味着该jar文件中的类将在JVM中多次加载,对于每个存在的WAR文件一次?接下来,如果我在此类中有一个静态同步方法,那么它是否仅在Web应用程序中存在的线程之间同步,而不是与不同类的jar文件中同一类中的同一方法同步? WAR文件?(希望这个问题有意义,如有必要将予以澄清)。 如果是这种

  • 问题内容: 我有以下定义。 在我的bean定义中,我有两个相同类型的bean 如果有所不同,则从另一个xml文件导入第二个bean。它们也设置了不同的属性。为什么spring不会抛出错误,因为已经定义了2个相同类型的bean。它是否使用变量名,因为它们与bean id匹配。dao是不同的,如果我对两个不同的bean使用@Qualifiers,则功能可以按预期工作。 这是一个更简洁的版本。我没有考虑

  • 我有一个包含3种方法的服务类,服务类也使用一些@Autowired注释。在3种方法中,我想模拟两种方法,但对第三种方法使用真实方法。 问题是: < li >如果我将@Autowired与@Spy一起使用,所有三个real方法实现都将被调用。 < li >如果我只使用@Spy,对real方法的调用返回空指针,因为没有自动连线对象的初始化。

  • 问题内容: 下面显示的是我尝试引用我的ApplicationProperties bean的代码片段。当我从构造函数引用它时,它为null,但是从另一个方法引用时,它很好。到目前为止,在其他类中使用此自动装配的bean都没有问题。但这是我第一次尝试在另一个类的构造函数中使用它。 在下面的代码段中,当从构造函数调用时,applicationProperties为null,但在convert方法中引用

  • 问题内容: 我的测试课: 我在行上得到一个空指针异常: 在精确的给出空指针异常 如何使Junit类中的beanObject字段自动装配成为可能,以便可以使用“ BeanClass”类中的方法? 从评论中复制: 用简单的术语来说.. beanClass是具有某些方法的接口..我用 注释标记了该beanClass。.banClass 是由具有方法实现的beanClassImpl类实现的。.我需要在我的