Java Spring:注入一个私有的内部类作为外部类';谁的会员?
我的班级结构如下Java Spring:注入一个私有的内部类作为外部类';谁的会员?,java,spring,inner-classes,Java,Spring,Inner Classes,我的班级结构如下 public class Outer{ private Mapper a; .... private class MapperA implements Mapper { } private class MapperB implements Mapper { } } 在我的Spring配置文件中,我想创建一个外部bean,并将MapperA或MapperB中的一个指定为属性。这可能吗 <bean id="outer"
public class Outer{
private Mapper a;
....
private class MapperA implements Mapper {
}
private class MapperB implements Mapper {
}
}
在我的Spring配置文件中,我想创建一个外部bean,并将MapperA或MapperB中的一个指定为属性。这可能吗
<bean id="outer" class="mypackage.Outer">
<property name="a" ?????='????' />
</bean>
编辑:更多信息,基于答案的反馈:
通常,您需要在
外部
中为映射器
设置一个setter,以及所需的映射器
的一个实例。但事实上:
Outer$MapperA
等创建一个实例,但这似乎有点令人讨厌。因此:
MapperA
还是MapperB
。i、 这里有一些工厂的能力最简单的方法是真正确定他们是否需要内敛/私密。如果是这样的话,那么它们真的不应该在配置中被引用,而配置应该是关于可公开访问的类。据我所知,在您创建
MapperA
和MapperB
普通的公共类之前,这是不可能的
但是,如果您确实希望将它们作为内部私有类保留,那么您可以手动“注入”它们
您需要使用
@PostInit
注释创建方法,并在那里初始化a
字段(a=new-MapperA()
,例如,或更复杂的内容)。使用这种方法,您还应该检查spring配置中是否打开了初始化回调。spring可以实例化private
内部类。配置的实际问题是它们也是非静态的,因此您需要一个
:
整洁。我决定使用单独的factory类,但这是一个很好的信息。谢谢。我怀疑这是否有效。Spring如何在没有外部类的封闭实例的情况下创建内部类的实例?@Willi:注意
。非静态内部类有一个隐式构造函数参数,指向封闭类的实例。要使用反射创建非静态内部类,应该显式传递该参数。Mmh。好吧,我现在没有。不过很有趣。谢谢,我决定为我的映射器使用factory类。谢谢你的建议。我总是忘记@PostInit注释。
<bean id="outer" class="mypackage.Outer">
<property name = "a">
<bean class = "mypackage.Outer.MapperA">
<constructor-arg ref = "outer" />
</bean>
</property>
</bean>