gpt4 book ai didi

java - java spring 中的部分托管、部分非托管类

转载 作者:行者123 更新时间:2023-11-30 09:37:46 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

Spring 管理的解决方案

如果您对 MyClass 进行 Spring 管理没有问题,那么 you could set the singleton property to false .这样,无论何时调用 context.getBean(),都会实例化一个新的 MyClass 实例。

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

非 Spring 管理的解决方案

如果出于某种原因你需要 MyClass 不是 Spring 管理的,那么我推荐你的第一种方法,因为它在 SomeObjectMyClass< 之间使用较弱的耦合 比你的第二种方法。过度使用单例会导致代码困惑,因为它们本质上是一种隐藏依赖关系的全局变量。参见 here以获得更详尽的论点。

关于java - java spring 中的部分托管、部分非托管类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10377313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com