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;
}
}