第三章:BeanDefinitionRegistry接口说明

本文详细介绍了Spring中BeanDefinitionRegistry接口的功能,包括注册、删除、查询Bean定义的方法,并展示了如何在代码中实现Bean定义的注册和获取。此外,还提及了别名注册的相关接口AliasRegistry。通过示例代码,演示了如何在DefaultListableBeanFactory中操作Bean定义,为理解Spring的内部工作原理提供了帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BeanDefinitionRegistry:是用于对Bean定义的增、删、查操作。

一:BeanDefinitionRegistry接口说明

public interface BeanDefinitionRegistry extends AliasRegistry {

	/**
	 * 注册bean定义
	 */
	void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
			throws BeanDefinitionStoreException;

	/**
	 * 根据名称删除bean定义
	 */
	void removeBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;

	/**
	 * 根据名称获取bean定义
	 */
	BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;

	/**
	 * 判断是否包含指定名称的Bean定义
	 */
	boolean containsBeanDefinition(String beanName);

	/**
	 * 获取所有已经注册的bean定义名称
	 */
	String[] getBeanDefinitionNames();

	/**
	 * 获取注册过的bean定义数量
	 */
	int getBeanDefinitionCount();

	/**
	*根据名称判断bean定义是否正在使用
	 */
	boolean isBeanNameInUse(String beanName);

}

二:bean定义别名注册

public interface AliasRegistry {

	/**
	 * 注册别名
	 */
	void registerAlias(String name, String alias);

	/**
	 * 删除别名
	 */
	void removeAlias(String alias);

	/**
	 * 判断name是否是bean定义的别名
	 */
	boolean isAlias(String name);

	/**
	 * 获取name的所有别名
	 */
	String[] getAliases(String name);
}

三:代码说明(建议自己写一遍,后期阅读源码)

package interfaceTest;

import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.beans.factory.support.*;
import org.springframework.context.annotation.ConfigurationClassPostProcessor;

public class BeanDefinitionRegistryTest {

	/**
       本次用例只写注册和获取,其他的大家自己写。
	*/
	public static void main(String[] args) {
		/**
		 *DefaultListableBeanFactory 是BeanFactory的子类,同时也实现了BeanDefinitionRegistry接口
		 */
		DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();

		/**
		 * 注册Bean定义
		 */
		registerBeanDefinition(beanFactory);

		/**
		 *根据名称获取bean定义
		 */
		BeanDefinition userBeanDefinition = getBeanDefinition("user", beanFactory);


		User user = beanFactory.getBean("user", User.class);

		System.out.println(user);
	}

	/**
	 * 注册Bean定义
	 */
	public static void registerBeanDefinition(BeanDefinitionRegistry registry){
		RootBeanDefinition def = new RootBeanDefinition(User.class);
		def.setScope(ConfigurableBeanFactory.SCOPE_SINGLETON);
		//创建bean定义
		registry.registerBeanDefinition("user",def);
	}
	
	/**
	 * 根据名称获取bean定义
	 */
	public static  BeanDefinition getBeanDefinition(String beanName,BeanDefinitionRegistry registry) {
		BeanDefinition beanDefinition = registry.getBeanDefinition(beanName);
		return beanDefinition;
	}

	/**
	 * 根据名称删除bean定义
	 */
	void removeBeanDefinition(String beanName) {

	}

	/**
	 * 判断是否包含指定名称的Bean定义
	 */
	boolean containsBeanDefinition(String beanName){
		return true;
	}

	/**
	 * 获取所有已经注册的bean定义名称
	 */
	String[] getBeanDefinitionNames(){
		return null;
	}

	/**
	 * 获取注册过的bean定义数量
	 */
	int getBeanDefinitionCount(){
		return 0;
	}

	/**
	 *根据名称判断bean定义是否正在使用
	 */
	boolean isBeanNameInUse(String beanName){
		return true;
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值