Spring源码之BeanFactory

扫码关注公众号:Java 技术驿站

发送:vip
将链接复制到本浏览器,永久解锁本站全部文章

【公众号:Java 技术驿站】 【加作者微信交流技术,拉技术群】

![20191102100829_1.png][20191102100829_1.png]

用于访问Spring Bean容器的顶级接口。这是Bean容器的基本客户端视图。更进一步的接口如:ListableBeanFactory,ConfigurableBeanFactory 可用于特殊目的。这个接口是由保存多个bean定义的对象实现的,每个对象都由字符串名称唯一标识。哪种类型的实例将返回取决于bean工厂配置:API是相同的。自Spring2.0以来,根据具体的应用程序上下文(例如,web环境中的“request”和“session”范围),还可以使用其他范围。BeanFactory是应用程序组件的中央注册中心,并且集中了应用程序组件的配置(例如,不再需要单个对象读取属性文件)。

注意,通常最好依赖注入通过设置器(set)或构造函数配置应用程序对象,而不是使用任何形式的“pull”配置,如BeanFactory查找。Spring的依赖注入功能是使用这个BeaS工厂接口及其子接口实现的。

通常,BeanFactory将加载存储在配置源(例如XML文档)中的bean定义,并使用{@code org.springframework.beans}包来配置bean。但是,一个实现可以简单地直接在Java代码中返回它创建的Java对象。对于如何存储定义没有限制:LDAP、RDBMS、XML、属性文件等。鼓励实现来支持bean之间的引用(依赖注入)。与{@link ListableBeanFactory}中的方法相比,该接口中的所有操作还将检查父工厂是否为{@link HierarchicalBeanFactory}。如果在该工厂实例中未找到bean,将立即调用父工厂。这个工厂实例中的bean应该在任何父工厂中重写相同名称的bean。Bean工厂实现应该尽可能支持标准的bean生命周期接口。完整的初始化方法和标准顺序是:

*


    *
  1. BeanNameAware’s {@code setBeanName}
    *
  2. BeanClassLoaderAware’s {@code setBeanClassLoader}
    *
  3. BeanFactoryAware’s {@code setBeanFactory}
    *
  4. EnvironmentAware’s {@code setEnvironment}
    *
  5. EmbeddedValueResolverAware’s {@code setEmbeddedValueResolver}
    *
  6. ResourceLoaderAware’s {@code setResourceLoader}
    * (only applicable when running in an application context)
    *
  7. ApplicationEventPublisherAware’s {@code setApplicationEventPublisher}
    * (only applicable when running in an application context)
    *
  8. MessageSourceAware’s {@code setMessageSource}
    * (only applicable when running in an application context)
    *
  9. ApplicationContextAware’s {@code setApplicationContext}
    * (only applicable when running in an application context)
    *
  10. ServletContextAware’s {@code setServletContext}
    * (only applicable when running in a web application context)
    *
  11. {@code postProcessBeforeInitialization} methods of BeanPostProcessors
    *
  12. InitializingBean’s {@code afterPropertiesSet}
    *
  13. a custom init-method definition
    *
  14. {@code postProcessAfterInitialization} methods of BeanPostProcessors
    *

在bean工厂关闭时,应用下列生命周期方法

*


    *
  1. {@code postProcessBeforeDestruction} methods of DestructionAwareBeanPostProcessors
    *
  2. DisposableBean’s {@code destroy}
    *
  3. a custom destroy-method definition
    *

Object getBean(String name) throws BeansException;

T getBean(String name, Class requiredType) throws BeansException; Object getBean(String name, Object… args) throws BeansException; T getBean(Class requiredType) throws BeansException; T getBean(Class requiredType, Object… args) throws BeansException; boolean containsBean(String name); boolean isSingleton(String name) throws NoSuchBeanDefinitionException; boolean isPrototype(String name) throws NoSuchBeanDefinitionException; boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException; boolean isTypeMatch(String name, Class typeToMatch) throws NoSuchBeanDefinitionException; Class getType(String name) throws NoSuchBeanDefinitionException; String\[\] getAliases(String name); [20191102100829_1.png]: https://gitee.com/chenssy/blog-home/raw/master/image/series-images/springboot/20191102100829_1.png ------- 来源:[http://ddrv.cn](http://ddrv.cn)
赞(0) 打赏
版权归原创作者所有,任何形式的转载请联系博主:daming_90:Java 技术驿站 » Spring源码之BeanFactory

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏