有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

  1. 我在主方法中为SomeObject创建一个getBean,并在创建对象时将其传递给MyClass

  2. 我创建了一个SomeObjectSingleton,它是ApplicationContextAware(它本身做一个getBean来获取SomeObject)。我直接打电话给单身汉。MyClass构造函数中的getImpl

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


共 (1) 个答案

  1. # 1 楼答案

    Spring托管解决方案

    如果在管理MyClassSpring方面没有问题,那么you could set the ^{} property to ^{}。这样,无论何时调用context.getBean(),都会实例化MyClass的一个新实例

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

    非Spring托管解决方案

    如果出于某种原因,您需要MyClass不受Spring管理,那么我建议您使用第一种方法,因为它在SomeObjectMyClass之间使用了比第二种方法更弱的耦合。过度使用单例会导致代码混乱,因为它们本质上是一种隐藏依赖项的全局变量。参见here了解更详细的论点