手动注册BeanDefinition获取bean实例
简单实现一下如何手动注册BeanDefinition,从而让beanFactory返回给我们一个spring容器管理的单例bean(如果不显示设置,默认为单例)。首先让一个类注解为@Component的类实现接口BeanFactoryAware,实现如下方法,从而获取beanFactory:@Overridepublic void setBeanFactory(BeanFactor...
·
简单实现一下如何手动注册BeanDefinition,从而让beanFactory返回给我们一个spring容器管理的单例bean(如果不显示设置,默认为单例)。首先让一个类注解为@Component的类实现接口BeanFactoryAware,实现如下方法,从而获取beanFactory:
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
DefaultListableBeanFactory factory=(DefaultListableBeanFactory)beanFactory;
MutablePropertyValues values=new MutablePropertyValues();
values.add("name","my dog haha ");
BeanDefinition definition=new RootBeanDefinition(Dog.class,null,values);
factory.registerBeanDefinition("dog",definition);
Dog dog=(Dog)factory.getBean("dog");
System.out.print(dog.getName());
}
之所以把BeanFactory转换成DefaultListableBeanFactory是因为此类实现了接口BeanDefinitionRegistry,这个接口中有注册BeanDefinition的方法。
把需要的实例化的类的属性以property:value的形式放入MutablePropertyValues中,然后放入BeanDefinition中,同时指定要实例化的类类型。
调用beanFactory注册BeanDefinition,调用getBean获取Dog单例对象。
更多推荐
已为社区贡献1条内容
所有评论(0)