我在代码中创建了许多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注入到这个类中。 MyClass是不弹簧管理,因为我需要以随机的方式在我的代码中创建相同的对象。我如何解决这个问题。
我在SomeObject的main方法中执行getBean,并在创建对象时将其传递给MyClass。
我创建了一个SomeObjectSingleton,它是ApplicationContextAware(它本身使用getBean来获取SomeObject)。我直接在MyClass构造函数中调用SomeObjectSingleton.getImpl。
您认为哪种方式最合适,或者还有其他更好的解决方法。
答案 0 :(得分:2)
Spring-Managed Solution
如果您对MyClass
Spring管理没有问题,那么you could set the singleton
property to false
。这样,每当您致电context.getBean()
时,都会实例化MyClass
的新实例。
然后在您的上下文XML文件中,您可以将SomeObject
与MyClass
联系起来,并保留其他两个属性(String a
和Integer b
)。需要注意的是,您必须使用setter注入而不是构造函数注入,至少对于未在上下文XML文件中设置的属性。
非弹簧管理解决方案
如果由于某种原因您需要MyClass
不是由Spring管理的,那么我建议您使用第一种方法,因为它使用SomeObject
和MyClass
之间的耦合较弱,而不是第二种方法。过度使用单例可能会导致令人困惑的代码,因为它们本质上是一种隐藏依赖关系的全局变量。有关更详细的论点,请参阅here。