为什么我不能将 Spring 环境对象注入到我的 bean 中?

Why I can't inject a Spring Environment object into my bean?

我在使用 Spring 框架的 Java 应用程序中遇到以下问题。

所以我有以下情况,进入root-context.xml配置文件我有这个bean配置:

<!-- Definition for datiPianiInterventiDaoImpl bean -->
   <bean id="datiPianiInterventiDaoImpl" class="it.myCompany.myclient.batch.dao.DatiPianiInterventiDaoImpl">
      <property name="dataSource"  ref="dataSource" />    
   </bean>  

好的,所以它工作正常,这个 bean 已正确创建并且工作正常。

问题是现在我必须在这个 bean 中注入 org.springframework.core.env.Environment Spring class.[= 的实例13=]

所以我尝试这样做:

public class DatiPianiInterventiDaoImpl implements DatiPianiInterventiDao {

    @Autowired
    private Environment env;

    ...................................................
    ...................................................
    ...................................................
}

但它似乎无法工作,因为当我执行我的应用程序时,Environment env 的值是 null.

@Autowired 已激活,因为我在我的项目的其他 classes 中使用了此注释。

那可能是什么问题呢?我在想,这可能取决于我将 id="datiPianiInteventiDaoImpl" 的 bean 定义为 root-context.xml(这里我还定义了注入到这个 bean 中的依赖项)。

所以也许我不能将 XML 依赖注入与 @Autowired 混合使用?

怎么了?我错过了什么?我怎样才能正确地将 Environment 实例注入这个 class?

环境为空的可能原因:

  • 您缺少 Environemnet 顶部的 @Component / @Service 注释 class。
  • 您使用 new 运算符在某处创建了 class DatiPianiInterventiDaoImpl 实例。
  • 您的条目是否对应于正确的包基础?
  • 我假设注释配置存在,因为@Autowired 在别处工作。
  • 尝试使用 @Service 注释您的 DatiPianiInterventiDaoImpl

将XML 依赖注入与@Autowired 混合使用没有问题。只要您的 bean 被 spring bean factory 扫描,这就是一个有效的语法。将 Enviroment 自动装配到 Dao classe 时出现问题,请参阅 dave 写的内容 here,您可以在此 link(其他答案)

中找到解决方案