Spring中实现动态注册bean
使用Spring期间可能会遇上需要动态注册bean的时候,此时可以通过如下实现:
基本步骤
//将applicationContext转换为ConfigurableApplicationContext
ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) applicationContext;
// 获取bean工厂并转换为DefaultListableBeanFactory
DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext.getBeanFactory();
// 通过BeanDefinitionBuilder创建bean定义
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(UserService.class);
// 设置属性userAcctDAO,此属性引用已经定义的bean:userAcctDAO
beanDefinitionBuilder.addPropertyReference("userAcctDAO", "UserAcctDAO");
// 注册bean,第一个参数为BeanName
defaultListableBeanFactory.registerBeanDefinition("sdfds",beanDefinitionBuilder.getRawBeanDefinition());
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
若BeanName不同将生成新的,若相同则会覆盖原有的。
例子
// 获取applicationContext的方式因项目而异。
private static ApplicationContext applicationContext = SpringUtil.getApplicationContext();
// 获取bean工厂并转换为DefaultListableBeanFactory
private static DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory)applicationContext.getAutowireCapableBeanFactory();
public static LdapTemplate setLdapBeen(LdapSetting ldap) {
String bennName = "ldapTemplate"+ldap.getSite().getId();
BeanDefinitionBuilder beanDefinitionBuilder =BeanDefinitionBuilder.genericBeanDefinition(LdapTemplate.class);
beanDefinitionBuilder.addPropertyValue("contextSource",getLdapContextSource(ldap));
defaultListableBeanFactory.registerBeanDefinition(bennName,beanDefinitionBuilder.getBeanDefinition());
return (LdapTemplate) applicationContext.getBean(bennName);
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
预览
除特别注明外,本站所有文章均为 Windcoder网 原创,转载请注明出处来自: springzhongdongtaizhucebean
Loading comments...

预览
暂无数据