spring中注册bean(通过代码动态注册)

27 篇文章 0 订阅
		//将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

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

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

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

<?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--------------------

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值