gpt4 book ai didi

java - Spring Bean 创建失败

转载 作者:行者123 更新时间:2023-12-01 12:06:41 25 4
gpt4 key购买 nike

我有一个这样的界面

public interface InterfaceA {
public String methodA();
}

我是这样实现的

public class ClassA implements InterfaceA {

@Override
public String methodA(){
return "HELLO";
}
}

我正在尝试在另一个类中引用此类的 bean

public class ClassB {

@Autowired
private InterfaceA mybean;

String str = mybean.methodA();
}

我有以下 bean 配置 <bean id="mybean" class="ClassA"></bean>

最有趣的一点是,如果我删除 methodA 的所有声明和实现在InterfaceAClassA然后尝试这样做

public class ClassB {

@Autowired
private InterfaceA mybean;

}

没有显示错误。在另一种情况下,当我尝试运行此应用程序时,会显示以下错误:“找不到依赖项 [ClassA] 类型的合格 bean”

最佳答案

是因为一个bean和一个java类的livecycle!

在你的ClassB中你有两个变量。 mybean 将在对象实例创建(由 spring)后由 Spring 填充。但是,一旦创建了对象实例,String str = mybean.methodA();就会被分配。而此时变量mybean仍然为null,因此实例创建将会失败!

解决方案:使用@PostConstruct、spring init-method或实现InitializingBean -- 请参阅此 answer概览

public class ClassB {

@Autowired
private InterfaceA mybean;

private String str;

void afterPropertiesSet() {
String str = mybean.methodA();
}
}

关于java - Spring Bean 创建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27539784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com