是否可以将bean注入内部类?
例如:
@Named
public class outer {
@Inject
private SomeClass inst; // Injected correctly
private static class inner {
@Inject
private AnotherClass instance; // Not being injected
...
编辑:" AnotherClass"仅由内部类使用,所以我不想用它来污染外部类。将声明保留在内部类中的其他原因是,如果我将AnotherClass成员移动到外部类,我必须从内部类中删除static修饰符或将其添加到外部类成员。
答案 0 :(得分:5)
仅当spring实例化对象时才使用@Inject
之类的注释。由于您使用@Named
注释外部,因此spring将从中创建一个bean并正确地注入SomeClass
实例。另一方面,inner
可能是您手动实例化的,因此Spring无法注意到这个注释并对其做了些什么。
这不是关于内部或顶级课程,而是关于谁创造了对象。
答案 1 :(得分:0)
从JVM的角度来看,静态内部类与顶级类没有区别,因此您可以将静态内部类声明为Spring bean(例如,通过使用@Named
注释它)。
显然,如果你想让注射工作,你需要从Spring获取该类的实例:
@Named
public class Outer {
@Inject
private Provider<Inner> innerFactory;
public void foo() {
Inner inner = innerFactory.get(); // Injected correctly
...
}
@Named
private static class Inner {
@Inject
private AnotherClass instance;
}
}