spring 动态创建bean实例
时间: 2023-08-16 08:22:14 浏览: 59
在Spring中,我们可以使用BeanFactory或者ApplicationContext来动态创建Bean实例。
1. 使用BeanFactory动态创建Bean实例
```java
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(Person.class);
builder.addPropertyValue("name", "张三");
builder.addPropertyValue("age", 18);
beanFactory.registerBeanDefinition("person", builder.getBeanDefinition());
Person person = (Person) beanFactory.getBean("person");
```
以上代码中,我们先创建一个DefaultListableBeanFactory实例,然后使用BeanDefinitionBuilder创建一个BeanDefinition,指定要创建的Bean类型为Person,并设置Bean的属性值(name和age)。最后将BeanDefinition注册到BeanFactory中,然后通过getBean()方法获取动态创建的Person实例。
2. 使用ApplicationContext动态创建Bean实例
```java
GenericApplicationContext context = new GenericApplicationContext();
context.refresh();
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClass(Person.class);
beanDefinition.getPropertyValues().add("name", "张三");
beanDefinition.getPropertyValues().add("age", 18);
context.registerBeanDefinition("person", beanDefinition);
Person person = (Person) context.getBean("person");
```
以上代码中,我们创建了一个GenericApplicationContext实例,并调用refresh()方法初始化容器。然后创建一个GenericBeanDefinition实例,设置Bean的类型为Person,并设置Bean的属性值(name和age)。最后将BeanDefinition注册到ApplicationContext中,然后通过getBean()方法获取动态创建的Person实例。
总的来说,使用Spring动态创建Bean实例的方法比较灵活,可以根据具体的需求来选择使用BeanFactory或者ApplicationContext。