2

我在我的代码中创建了许多 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不是弹簧管理的,因为我需要以随机方式在我的代码中创建相同的对象。我如何尝试解决这个问题。

  1. 我在我的主要方法中为 SomeObject 做了一个 getBean ,并在我创建它的对象时将它传递给 MyClass 。

  2. 我创建了一个 SomeObjectSingleton,它是 ApplicationContextAware(它本身做一个 getBean 来获取 SomeObject)。我在 MyClass 构造函数中直接调用 SomeObjectSingleton.getImpl 。

您认为哪种方式似乎最合适,或者有没有其他更好的方法来解决这个问题。

4

1 回答 1

2

弹簧管理的解决方案

MyClass如果您对Spring 管理没有问题,那么您可以将singleton属性设置为false. 这样,每当您调用 时,都会实例化context.getBean()一个新的实例。MyClass

然后在您的上下文 XML 文件中,您可以SomeObject连接MyClass并保留其他两个属性 (String aInteger b) 未设置。需要注意的是,您必须使用 setter 注入而不是构造函数注入,至少对于未在上下文 XML 文件中设置的属性。

非弹簧管理解决方案

如果由于某种原因您不需要MyClass受 Spring 管理,那么我推荐您的第一种方法,因为它在SomeObject和之间使用MyClass比第二种方法更弱的耦合。过度使用单例会导致代码混乱,因为它们本质上是一种隐藏依赖关系的全局变量。有关更详细的论点,请参见此处。

于 2012-04-30T01:40:05.883 回答