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);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。