下面列出了org.springframework.beans.factory.config.SingletonBeanRegistry#registerSingleton ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public static void main(String[] args) throws InterruptedException {
// 创建 BeanFactory 容器
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
// 创建一个外部 UserFactory 对象
UserFactory userFactory = new DefaultUserFactory();
SingletonBeanRegistry singletonBeanRegistry = applicationContext.getBeanFactory();
// 注册外部单例对象
singletonBeanRegistry.registerSingleton("userFactory", userFactory);
// 启动 Spring 应用上下文
applicationContext.refresh();
// 通过依赖查找的方式来获取 UserFactory
UserFactory userFactoryByLookup = applicationContext.getBean("userFactory", UserFactory.class);
System.out.println("userFactory == userFactoryByLookup : " + (userFactory == userFactoryByLookup));
// 关闭 Spring 应用上下文
applicationContext.close();
}
public static void registerSingleton(ApplicationContext applicationContext, String beanName, Object singletonObject) {
AutowireCapableBeanFactory beanFactory = applicationContext.getAutowireCapableBeanFactory();
if (!SingletonBeanRegistry.class.isAssignableFrom(beanFactory.getClass())) {
throw new IllegalArgumentException(
"ApplicationContext: " + applicationContext.getClass().toString()
+ " doesn't implements SingletonBeanRegistry, cannot register JMS connection at runtime");
}
SingletonBeanRegistry beanDefinitionRegistry = (SingletonBeanRegistry) beanFactory;
beanDefinitionRegistry.registerSingleton(beanName, singletonObject);
}
public static void registerSingleton(BeanDefinitionRegistry registry, String beanName, Object singletonObject) {
if (!SingletonBeanRegistry.class.isAssignableFrom(registry.getClass())) {
throw new IllegalArgumentException(
"BeanDefinitionRegistry: " + registry.getClass().toString()
+ " doesn't implements SingletonBeanRegistry, cannot register JMS connection at runtime");
}
SingletonBeanRegistry beanDefinitionRegistry = (SingletonBeanRegistry) registry;
beanDefinitionRegistry.registerSingleton(beanName, singletonObject);
}