admin 发表于 2013-8-30 15:30:43

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]
查看完整版本: spring中注册bean(通过代码动态注册)