普通数据Bean, Autowired Bean(一个@Component)的调用者,看到NULL



新手Spring问题。我有一个@Component类,正确地注释了,它为我提供了环境配置。

@Component
public class EnvConfig { 
   //...
}

因为它是@Component,所以会被自动注入获取。

但是这个类的调用者是一个普通的数据bean。普通数据bean有一个特殊的实用程序方法,需要访问这个类。
public class EmployeeBean {
   @Autowired
   EnvConfig envConfig;
   //...
   public void getSpecialInfo() 
   {
       envConfig.method1();
       envConfig.method2();
   }
}

envConfig是NULL当我调试到这个方法。

所以Autowired对象的调用者需要是一个@Component, @Service或@Repository?

或多或少,是的。Spring显然可以自动装配它所管理的对象(换句话说,"Spring Beans")——否则它怎么能做到呢?所以,如果你自己创建一个对象(new ...),那么它就不是一个"spring bean",只是一个随机的对象,spring无法控制它——它也不能自动地在那里装配一些东西。

这样做的一种方法是使它们成为@Component等,并让它们通过Spring的组件扫描被发现。

创建Spring bean的其他方法将是JavaConfig(通过@Bean), XML配置(通过<bean .../>)和其他(例如通过PreProcessors,但这开始变得深奥)。

当然,您也可以使用一些对Spring应用程序上下文的静态访问来让您自己的对象访问Spring bean——但这并不是一个真正好的方法。

最新更新