【发布时间】:2014-11-19 11:04:19
【问题描述】:
我正在学习 Spring Core 认证,我对 Spring 如何使用私有构造函数(例如单例模式)实例化类或如何从工厂实例化对象(不是 Spring 上下文)有以下疑问。
例如我有以下单例工厂:
public class AccountServiceSingleton implements AccountService {
private static AccountServiceSingleton inst = new AccountServiceSingleton();
private AccountServiceSingleton() { ... }
public static AccountService getInstance() {
// ...
return inst;
}
}
这是一个单例工厂,因为它构建了一个私有静态对象,该对象由一个私有构造函数构建,而我有一个公共方法 来获取这个对象。
所以我认为问题Spring如何构建这个对象?取决于构造函数是私有的,所以我不能在我的Java配置类中做这样的事情
@Confguration
public class ApplicationConfig{
@Bean
public AccountServiceSingleton accountServiceSingleton(){
return new AccountServiceSingleton();
}
}
因为我无法访问私有 AccountServiceSingleton() 构造函数。
同时出于同样的原因我不能使用等效的 XML 配置。
我是否了解问题所在或我遗漏了什么?
我认为我遗漏了一些东西,因为在我阅读的文档中,我可以使用以下 2 个解决方案来解决上一个问题:
在@Configuration 类中使用@Bean 方法:所以,阅读它,我认为以前的Java 配置类可以工作……但是为什么呢?
XML 配置中的XML factory-method 属性,网上搜索发现应该是这样的,但是如何使用这个来配置之前的AccountServiceSingleton bean in an XML配置?
Tnx
【问题讨论】:
-
回答名义问题:Reflection。此外,仅仅因为一个类有一个私有构造函数并不意味着它会自动成为一个单例,还有很多其他原因可以让你将构造函数设为私有。
-
你可能还想看一些答案here
标签: java spring design-patterns singleton factory