我在代码中创建了许多 MyClass 类的对象。
public class MyClass {
private String a;
private Integer b;
private SomeObject c;
public A(String a, Integer b, SomeObject c) {
this.a = a; this.b = b; this.c = c;
}
}
当我创建 MyClass 的对象时,我是否可以使用 Spring 将 SomeObject 注入(inject)到此类中。 MyClass 不是 spring 管理的,因为我需要以随机方式在代码中创建相同的对象。我如何尝试解决这个问题。
我在 SomeObject 的主方法中执行 getBean 操作,并在创建 MyClass 对象时将其传递给 MyClass。
我创建了一个 SomeObjectSingleton,它是 ApplicationContextAware(它本身执行 getBean 来获取 SomeObject)。我直接在MyClass构造函数中调用SomeObjectSingleton.getImpl。
您认为哪种方式最合适,或者有其他更好的方式来解决这个问题。
最佳答案
Spring 管理的解决方案
如果您对 MyClass
Spring 管理没有问题,那么 you could set the singleton
property to false
。这样,每当您调用 context.getBean()
时,MyClass
的新实例都会被实例化。
然后在上下文 XML 文件中,您可以将 SomeObject
与 MyClass
连接起来,并保留其他两个属性(String a
和 整数 b
) 未设置。需要注意的是,您必须使用 setter 注入(inject)而不是构造函数注入(inject),至少对于上下文 XML 文件中未设置的属性是这样。
非 Spring 管理的解决方案
如果由于某种原因您需要 MyClass
不由 Spring 管理,那么我推荐您使用第一种方法,因为它在 SomeObject
和 MyClass< 之间使用较弱的耦合
比你的第二种方法。过度使用单例可能会导致代码困惑,因为它们本质上是一种隐藏依赖关系的全局变量。请参阅here以获得更详细的论证。
关于java - java spring中部分托管、部分非托管类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10377313/