java spring中的部分托管类和部分非托管类
我在代码中创建了许多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将某个对象注入这个类。MyClass不是spring管理的,因为我需要以随机方式在代码中创建相同的对象。我是如何解决这个问题的
我在主方法中为SomeObject创建一个getBean,并在创建对象时将其传递给MyClass
我创建了一个SomeObjectSingleton,它是ApplicationContextAware(它本身做一个getBean来获取SomeObject)。我直接打电话给单身汉。MyClass构造函数中的getImpl
你认为哪种方法最合适,或者有没有其他更好的方法来解决这个问题
# 1 楼答案
Spring托管解决方案
如果在管理} property to ^{} 。这样,无论何时调用
MyClass
Spring方面没有问题,那么you could set the ^{context.getBean()
,都会实例化MyClass
的一个新实例然后在上下文XML文件中,可以将
SomeObject
与MyClass
连接起来,并保留其他两个属性(String a
和Integer b
)未设置。需要注意的是,您必须使用setter注入而不是构造函数注入,至少对于未在上下文XML文件中设置的属性是这样非Spring托管解决方案
如果出于某种原因,您需要
MyClass
不受Spring管理,那么我建议您使用第一种方法,因为它在SomeObject
和MyClass
之间使用了比第二种方法更弱的耦合。过度使用单例会导致代码混乱,因为它们本质上是一种隐藏依赖项的全局变量。参见here了解更详细的论点