spring中注册bean(通过代码动态注册)
view plaincopyprint?[*]//将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
[*]defaultListableBeanFactory.registerBeanDefinition("sdfds",
[*] beanDefinitionBuilder.getRawBeanDefinition());
//将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 defaultListableBeanFactory.registerBeanDefinition("sdfds", beanDefinitionBuilder.getRawBeanDefinition());User.java
view plaincopyprint?
[*]public class User {
[*]
[*] private String username;
[*] private String password;
[*]
[*] public String getUsername() {
[*] return username;
[*] }
[*]
[*] public void setUsername(String username) {
[*] this.username = username;
[*] }
[*]
[*] public String getPassword() {
[*] return password;
[*] }
[*]
[*] public void setPassword(String password) {
[*] this.password = password;
[*] }
[*]
[*]}
public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
UserService.java
view plaincopyprint?
[*]public class UserService {
[*]
[*] private User user;
[*]
[*]
[*] public void test(){
[*] System.out.println(user.getUsername()+"--------------------");
[*] }
[*]
[*] public User getUser() {
[*] return user;
[*] }
[*]
[*]
[*]
[*] public void setUser(User user) {
[*] this.user = user;
[*] }
[*]}
public class UserService { private User user; public void test(){ System.out.println(user.getUsername()+"--------------------"); } public User getUser() { return user; } public void setUser(User user) { this.user = user; }}
示例:
BeanFactoryAwareBean.java
view plaincopyprint?
[*]import org.springframework.beans.BeansException;
[*]import org.springframework.beans.factory.BeanFactory;
[*]import org.springframework.beans.factory.BeanFactoryAware;
[*]import org.springframework.beans.factory.support.BeanDefinitionBuilder;
[*]import org.springframework.beans.factory.support.DefaultListableBeanFactory;
[*]import org.springframework.context.ApplicationListener;
[*]import org.springframework.context.event.ContextRefreshedEvent;
[*]
[*]public class BeanFactoryAwareBean implements BeanFactoryAware,
[*] ApplicationListener<ContextRefreshedEvent> {
[*] private DefaultListableBeanFactory beanFactory;
[*]
[*] public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
[*] System.out.println("setBeanFactory.........................");
[*] this.beanFactory = (DefaultListableBeanFactory) beanFactory;
[*] }
[*]
[*] public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
[*] System.out.println("ContextRefreshed...................");
[*]
[*] BeanDefinitionBuilder userBeanDefinitionBuilder = BeanDefinitionBuilder
[*] .genericBeanDefinition(User.class);
[*] userBeanDefinitionBuilder.addPropertyValue("username", "chinfeng");
[*] userBeanDefinitionBuilder.addPropertyValue("password", "123456");
[*] beanFactory.registerBeanDefinition("user",
[*] userBeanDefinitionBuilder.getRawBeanDefinition());
[*]
[*] BeanDefinitionBuilder usersBeanDefinitionBuilder = BeanDefinitionBuilder
[*] .genericBeanDefinition(UserService.class);
[*] usersBeanDefinitionBuilder.addPropertyReference("user", "user");
[*] beanFactory.registerBeanDefinition("userService",
[*] usersBeanDefinitionBuilder.getRawBeanDefinition());
[*] }
[*]}
import org.springframework.beans.BeansException;import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.BeanFactoryAware;import org.springframework.beans.factory.support.BeanDefinitionBuilder;import org.springframework.beans.factory.support.DefaultListableBeanFactory;import org.springframework.context.ApplicationListener;import org.springframework.context.event.ContextRefreshedEvent;public class BeanFactoryAwareBean implements BeanFactoryAware, ApplicationListener<ContextRefreshedEvent> { private DefaultListableBeanFactory beanFactory; public void setBeanFactory(BeanFactory beanFactory) throws BeansException { System.out.println("setBeanFactory........................."); this.beanFactory = (DefaultListableBeanFactory) beanFactory; } public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { System.out.println("ContextRefreshed..................."); BeanDefinitionBuilder userBeanDefinitionBuilder = BeanDefinitionBuilder .genericBeanDefinition(User.class); userBeanDefinitionBuilder.addPropertyValue("username", "chinfeng"); userBeanDefinitionBuilder.addPropertyValue("password", "123456"); beanFactory.registerBeanDefinition("user", userBeanDefinitionBuilder.getRawBeanDefinition()); BeanDefinitionBuilder usersBeanDefinitionBuilder = BeanDefinitionBuilder .genericBeanDefinition(UserService.class); usersBeanDefinitionBuilder.addPropertyReference("user", "user"); beanFactory.registerBeanDefinition("userService", usersBeanDefinitionBuilder.getRawBeanDefinition()); }}
applicationContext.xml
view plaincopyprint?
[*]<?xml version="1.0" encoding="UTF-8"?>
[*]<beans xmlns="http://www.springframework.org/schema/beans"
[*] xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
[*] xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
[*] <bean id="beanFactoryAwareBean" class="BeanFactoryAwareBean"></bean>
[*]</beans>
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="beanFactoryAwareBean" class="BeanFactoryAwareBean"></bean></beans>
结果:
setBeanFactory.........................
ContextRefreshed...................
chinfeng--------------------
页:
[1]