豆类创作在春天失败了

时间:2014-12-18 05:28:25

标签: java spring

我有这样的界面

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>

最有趣的一点是,如果我删除methodAInterfaceAClassA的所有声明和实现,然后尝试这个

public class ClassB {

    @Autowired
    private InterfaceA mybean;

}

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

1 个答案:

答案 0 :(得分:1)

这是因为bean和java类的livecyle!

在你的ClassB中你有两个变量。在创建对象实例之后(春天),Spring将填充mybean。但是一旦创建了对象实例,就会对String str = mybean.methodA();进行处理。此时变量mybean仍然为空,而实例创建将失败!

解决方案:使用@PostConstruct,spring init-method或实施InitializingBean - 有关概述,请参阅此answer

public class ClassB {

   @Autowired
   private InterfaceA mybean;

   private String str;

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