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

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

  1. 我在 SomeObject 的主方法中执行 getBean 操作,并在创建 MyClass 对象时将其传递给 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/

相关文章:

java - 如何知道我的代码在 IDE 中以 "debug"模式运行?

java - 如何使用 JPA 以线程安全的方式保存或更新对象?

java - --i 和 i-- 的行为与++i 和 i++ 相同吗?

java - SpringSecurity RememberMeServices 不是通过注解注入(inject)的

java - 如何在 spring java 配置中设置日志记录属性?

spring - WebSockets JSR 356 Spring 集成@ServerEndpoint

java - 按对象集的值过滤对象列表

java - 找不到元素 'resources'的声明

java - Spring应用上下文

java - 服务中的 Spring + Apache CXF @Autowire 始终为 null