Spring Boot-4-BeanFactory的设计哲学

一、BeanFactory

org.springframework.beans.factory.BeanFactory (顶级接口)
始自 2001.4.13
当然,后续是经过修改的。主要提供了获取单个bean的方法定义,完全不提供存入bean的方法,如果是你来设计这个顶级接口,是否会把存入bean的方法设计进去呢。
为什么会这样设计?因为这个接口最终会对用户可见,用户通常只会需要获取bean,而不会去直接添加bean,所以,这个类就只提供获取bean相关的接口。

二、ListableBeanFactory

org.springframework.beans.factory.ListableBeanFactory (extends BeanFactory)
始自 2001.4.16
可以看出这个接口是和BeanFactory同一时期设计的,从名字上看出他是可枚举的BeanFactory,提供能枚举所有bean实例的能力。
这个接口其实就是将获取多个bean的相关方法独立出来单独做一个接口,虽然这个接口里方法使用频率并不是特别高,但是却是必须的,所以独立出来一个单独的接口,继承BeanFactory,接口方法纵向拆分+继承,学到了没?

三、HierarchicalBeanFactory

org.springframework.beans.factory.HierarchicalBeanFactory (extends BeanFactory)
始自 2003.7.7
这个接口是继BeanFactory 2年多之后才出现,可见是对BeanFactory功能的补充,他设计了一个获取父BeanFactory的方法,也就是说他将BeanFactory分层次了,BeanFactory是有父子关系的。

四、AutowireCapableBeanFactory

org.springframework.beans.factory.config.AutowireCapableBeanFactory (extends BeanFactory)
始自 2003.12.4
autowire是自动装配的意思,就是依赖自动注入。官方对这个类的解释是:
BeanFactory的扩展接口,用来给想拥有自动装配能力的bean factories实现,提供给那些想把自动装配能力暴露给已经存在的bean实例(外部)的bean factories。
一般应用代码中不会使用这个接口,通常只使用BeanFactory或者ListableBeanFactory接口。
集成其他框架的代码可以利用这个接口来使没有受Spring管理生命周期的bean实例进行自动装配,如使用WebWork Actions和Tapestry Page objects时就尤其有用。
需要注意的是org.springframework.context.ApplicationContext没有实现这个接口,因为用户代码几乎不会使用这项功能。尽管如此,我们还是可以通过org.springframework.context.ApplicationContext#getAutowireCapableBeanFactory()方法从application context中获取到他。
实现AutowireCapableBeanFactory接口的同时很可能需要同时实现org.springframework.beans.factory.BeanFactoryAware接口,他能在ApplicationContext中暴露BeanFactory,你只需要简单的强转一下就能获取到AutowireCapableBeanFactory。

官方的介绍不知你是否能全面理解,总体来说就是这个接口提供的能力就是帮你装配Spring管理之外的bean,这种要求我们几乎不会使用,暂且权当增长见识了。

五、SimpleJndiBeanFactory

org.springframework.jndi.support.SimpleJndiBeanFactory (extends BeanFactory)
始自 Spring 2.5
这个类目前没有涉及,就先放着。

六、BeanDefinitionRegistry

org.springframework.beans.factory.support.BeanDefinitionRegistry (extends AliasRegistry)
始自 2003.11.26
这是一个功能相对独立,但是不可或缺的能力,他表示的是持有以及注册BeanDefinition的能力。
这个接口功能独立出来设计,不和其他接口混合,职责清晰。只是在使用上稍微麻烦,真正实现这个接口的只有一个DefaultListableBeanFactory,所以当ApplicationContext实现了这个接口时,实现方案为聚合DefaultListableBeanFactory,然后内部调用DefaultListableBeanFactory的能力完成BeanDefinitionRegistry的能力。
见识到、学到这种设计技巧没有?

七、































 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值