【问题标题】:EnumTranslator bean is not injected (is null)未注入 EnumTranslator bean(为空)
【发布时间】:2018-04-26 10:58:57
【问题描述】:

RepositoryRestMvcConfiguration 类的 Spring Data REST 有方法 enumTranslator():

@Bean
public EnumTranslator enumTranslator() {
  return new EnumTranslator(resourceDescriptionMessageSourceAccessor());
}

(我希望)注册一个“enumTranslator”Bean。

但是当我尝试在我的组件中使用它时,它不会被注入并且总是null:

@Component
public class MyComponent {

    private final EnumTranslator enumTranslator; 

    public MyComponent(EnumTranslator enumTranslator) {
        this.enumTranslator = enumTranslator;
    }

    public void someMethod() {             
        // enumTranslator -> null
    }
}

有人可以解释为什么会发生这种情况以及如何正确注入此类 bean 吗?

更新

我想通了 - 我试图实现一个不受 Spring 管理的类(Spring 转换器)))

感谢所有试图帮助我的人!

【问题讨论】:

  • 您所描述的内容应该有效,因此您的描述中可能缺少某些内容。你确定是 Spring 实例化了 MyComponent 吗?
  • (在调试器中运行,在构造函数中下断点,查看堆栈看看是什么调用了MyComponent(EnumTranslator)构造函数)
  • 谢谢@slim!我找到了原因 - 检查我的更新..)

标签: java spring spring-data-rest inject


【解决方案1】:

看起来RepositoryRestMvcConfiguration bean 没有加载到 Spring 容器中。
例如,尝试使用 @Import(RepositoryRestMvcConfiguration.class)Configuration 类导入它。

根据documentation

2.4 配置Spring Data REST

...

您可以将此类导入到现有配置中 使用 @Import 注释,或者您可以将其子类化并覆盖任何 configureXXX 方法将您自己的配置添加到 Spring Data REST。

【讨论】:

  • 从 Spring 4.3 开始,如果只有一个构造函数,@Autowired 是隐式的,不需要。
  • 对。谢谢。无论如何,我保持了指定它的习惯。我编辑了。
  • 我指的不是自动装配,而是导入 bean。您可以通过显示所有已加载的 Spring bean 来检查它。 stackoverflow.com/questions/9602664/…
  • 谢谢@davidxxx!我找到了原因 - 检查我的更新)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 2022-01-19
相关资源
最近更新 更多