我正在学习 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 种解决方案来解决上一个问题:
在@Configuration 类中使用@Bean 方法:所以,阅读它,我认为以前的Java 配置类有效...但是为什么呢?
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/