我正在研究Spring Core认证,我有以下疑问,它涉及Spring如何使用私有构造函数实例化类(例如Singleton模式),或者如何实例化Factories中的对象(不是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工厂方法属性,在线搜索我发现必须是这样的,但是如何使用它在XML中配置以前的 AccountServiceSingleton bean配置?
TNX
答案 0 :(得分:4)
这很简单,你也可以这样做:
Constructor cxor = AccountServiceSingleton.class.getDeclaredConstructor();
cxor.setAccessible(true);
return cxor.newInstance();
答案 1 :(得分:2)
我自己找到答案仍在阅读文档。我认为这个问题的正确答案是:
如果我想将此类配置为Spring bean:
public class AccountServiceSingleton implements AccountService {
private static AccountServiceSingleton inst = new AccountServiceSingleton();
private AccountServiceSingleton() { ... }
public static AccountService getInstance() {
// ...
return inst;
}
}
使用 Java配置我只需在配置类中使用 @Bean 注释相对bean方法。
如果我想使用 XML配置配置bean,我必须使用工厂方法属性,类似于:
<bean id=“accountService” class=“com.acme.AccountServiceSingleton”
factory-method="getInstance" />
所以它说将调用getInstance()方法从我的单件工厂中获取单例对象
答案 2 :(得分:0)
这样做怎么样:
@Confguration
public class ApplicationConfig{
@Bean
public AccountServiceSingleton accountServiceSingleton(){
return AccountServiceSingleton.getInstance();
}
}