DetaultListableBeanFactory分层关系解析一

DefaultListableBeanFactory

首先是继承图

继承图

BeanFactory最基础的bean生产工厂的主要实现功能

String FACTORY_BEAN_PREFIX = "&";


//根据name获取一个bean对象
Object getBean(String name) throws BeansException;

//根据name和requireType指定的类型获取指定的bean实例
<T> T getBean(String name, Class<T> requiredType) throws BeansException;

//根据name和args参数获取bean实例,注意:args是bean的构造器的参数
Object getBean(String name, Object... args) throws BeansException;

//根据requireType类型获取bean,也可能使用Type的名字获取bean
<T> T getBean(Class<T> requiredType) throws BeansException;

//根据类型和构造器参数获取bean
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;

//获取一个requireType类型的bean的封装对象,可以进行后续复杂的操作
//如根据参数实例化一个bean,对于匹配了多个bean的情况,可以进行stream()
//操作排除NullBean,或者是对多个匹配的bean进行排序
<T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);


<T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);

//检查工厂是否包含name对应的bean或者有无单例bean
boolean containsBean(String name);

//判断bean的实例化模式是否是singleton单例模式
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;

//判断bean的实例化模式是否是prototype
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;

//检查name对应的bean与typeToMatch对应的类型是否一致
boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;

//检查name对应的bean与typeToMatch对应的类型是否一致
boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;


@Nullable
//根据name查找对应的bean的类型
Class<?> getType(String name) throws NoSuchBeanDefinitionException;


String[] getAliases(String name);//获取name对应的bean的别名,就是外号
BeanObjectProvider的一个实现类
public <T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType) {
	return new BeanObjectProvider<T>() {
		@Override
		public T getObject() throws BeansException {
			T resolved = resolveBean(requiredType, null, false);
			if (resolved == null) {
				throw new NoSuchBeanDefinitionException(requiredType);
			}
			return resolved;
		}
		@Override
		public T getObject(Object... args) throws BeansException {
			T resolved = resolveBean(requiredType, args, false);
			if (resolved == null) {
				throw new NoSuchBeanDefinitionException(requiredType);
			}
			return resolved;
		}
		@Override
		@Nullable
		//当无法获取时返回null
		public T getIfAvailable() throws BeansException {
			return resolveBean(requiredType, null, false);
		}
		@Override
		@
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值