这篇文章主要介绍了spring动态bean注册示例,需要的朋友可以参考下
1.在一些特殊的场景中需要动态向spring注册bean 2.spring版本2.5.6
复制代码 代码如下: public class ServiceServiceImpl implements ServiceService, ApplicationContextAware {
@Override public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext) throws BeansException { this.context = applicationContext; }
public void addBeanService(Service service) throws BVSException { if (!context.containsBean(service.getServiceName())) { Class<?> serviceClass = getServiceClass(service.getClassName()); BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(serviceClass); beanDefinitionBuilder.addPropertyValue("servicename", service.getServiceName()); registerBean(service.getServiceName(), beanDefinitionBuilder.getRawBeanDefinition()); }
}
/** * @desc 向spring容器注册bean * @param beanName * @param beanDefinition */ private void registerBean(String beanName, BeanDefinition beanDefinition) { ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) context; BeanDefinitionRegistry beanDefinitonRegistry = (BeanDefinitionRegistry) configurableApplicationContext .getBeanFactory(); beanDefinitonRegistry.registerBeanDefinition(beanName, beanDefinition); }
/** * @desc 根据类名查找class * @param className * @return * @throws BVSException */ private Class<?> getServiceClass(String className) throws BVSException { try { return Thread.currentThread().getContextClassLoader().loadClass(className); } catch (ClassNotFoundException e) { log.error("not found service class:" + className, e); throw new BVSException("not found service class:" + className, e); } } }
|