【问题标题】:@Autowired not working in inner class@Autowired 在内部类中不起作用
【发布时间】:2015-02-25 13:31:54
【问题描述】:

我有一个类在内部类中被@Autowired。但是在执行时会抛出空指针异常,而在外部类中自动装配时它可以正常工作

class outer {
   ...
   class inner {
       @Autowired
       private var somevar;
       private process () {
           somevar.someMethod();
   }
}

知道为什么这不起作用吗? somevar.someMethod(); 行正在生成 NPE。

【问题讨论】:

  • 这可能会有所帮助:stackoverflow.com/questions/24213823/…
  • 这篇文章试图在外部类中@Autowire 内部类。我不必那样做。我无法在 spring 上下文中创建内部类的 bean,因为我需要传入在外部类中创建的构造函数 arg。这有什么影响吗?
  • 如何创建内部类的实例? new?
  • @AgentX 如果在 Spring 之外创建实例,Spring 应该如何注入依赖项?

标签: java spring dependency-injection inner-classes


【解决方案1】:

外部类管理内部实例创建有什么原因吗?例如,内部对象是否需要对外部对象的引用?如果是的话,你不能用它做豆子。仅当内部类是静态的时,它们才可以是 bean。因此,您必须自己管理所有依赖项(创建它的代码应该完成工作)。

如果不需要对外部实例的这种引用,请将内部类设为静态,使用 @Component 进行注释,并让 spring 完成其余的依赖注入。

【讨论】:

  • 内部类构造函数接受外部类传递的 Map 数据。这个 Map 是由外部类构造的。这就是我无法创建内部类 Bean 的原因。如果内部类不是静态的,可以用@Component 注释吗?
  • 没有。只能使用静态类来创建 bean
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
相关资源
最近更新 更多