java spring中的部分托管,部分非托管类

时间:2012-04-30 00:45:05

标签: 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将SomeObject注入到这个类中。 MyClass是弹簧管理,因为我需要以随机的方式在我的代码中创建相同的对象。我如何解决这个问题。

  1. 我在SomeObject的main方法中执行getBean,并在创建对象时将其传递给MyClass。

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

  3. 您认为哪种方式最合适,或者还有其他更好的解决方法。

1 个答案:

答案 0 :(得分:2)

Spring-Managed Solution

如果您对MyClass Spring管理没有问题,那么you could set the singleton property to false。这样,每当您致电context.getBean()时,都会实例化MyClass的新实例。

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

非弹簧管理解决方案

如果由于某种原因您需要MyClass不是由Spring管理的,那么我建议您使用第一种方法,因为它使用SomeObjectMyClass之间的耦合较弱,而不是第二种方法。过度使用单例可能会导致令人困惑的代码,因为它们本质上是一种隐藏依赖关系的全局变量。有关更详细的论点,请参阅here