java - Spring如何使用私有(private)构造函数(单例模式)和来自工厂的对象实例化cClasses?

标签 java spring design-patterns singleton factory

我正在学习 Spring 核心认证,我对 Spring 如何使用私有(private)构造函数(例如 Singleton 模式)实例化类或如何从工厂实例化对象(不是 Spring 上下文)有以下疑问。

例如我有以下单例工厂:

public class AccountServiceSingleton implements AccountService {

    private static AccountServiceSingleton inst = new AccountServiceSingleton();

    private AccountServiceSingleton() { ... }

    public static AccountService getInstance() {
        // ...
        return inst;
    }
}

这是一个单例工厂,因为它构建了一个使用私有(private)构造函数构建的私有(private)静态对象,而我有一个公共(public)方法 来获取这个对象。

所以我认为 Spring 如何构建这个对象? 这个问题取决于构造函数是私有(private)的,所以我不能在我的 Java 配置类中做这样的事情

@Confguration
public class ApplicationConfig{

    @Bean
    public AccountServiceSingleton accountServiceSingleton(){
        return new AccountServiceSingleton();
    }
}

因为我无法访问私有(private) AccountServiceSingleton() 构造函数。

同时,出于同样的原因,我不能使用等效的 XML 配置。

我是否了解问题所在或是否遗漏了什么?

我认为我遗漏了一些东西,因为在我阅读的文档中,我可以使用以下 2 种解决方案来解决上一个问题:

  1. @Configuration 类中使用@Bean 方法:所以,阅读它,我认为以前的Java 配置类有效...但是为什么呢?

  2. XML配置中的XML factory-method属性,网上搜索发现应该是这样的,但是如何使用它来配置之前的AccountServiceSingleton bean在XML中配置?

谢谢

最佳答案

这真的很简单,你也可以做到:

Constructor cxor = AccountServiceSingleton.class.getDeclaredConstructor();
cxor.setAccessible(true);
return cxor.newInstance();

关于java - Spring如何使用私有(private)构造函数(单例模式)和来自工厂的对象实例化cClasses?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27015262/

相关文章:

c++ - 内存管理的思路,std::map,boost::shared_ptr

java - 我如何在静态方法中刷新相同的 Activity

java - 使用静态类 AppContext 是个好主意吗?

java - 我将一个txt文件读取到Java中,我想将其编码为边,其中每条边都是一对节点(DFS)

java - 启用 spring-data-jpa 存储库时没有方法 readResolve

java - 使用 Spring 时实例化对象,用于测试与生产

javascript - 以事件驱动的方式编写异步代码

java - 如何使用mybatis在postgres中将int[]映射到integer[]

java - 如何在 Java GUI 上添加多行标签?

java - 有没有办法一次性加载 Spring Boot 应用程序中的配置?