Spring BeanFactory

BeanFactory:
一、BeanFactory的Javadoc:
1.用于访问Spring bean容器的根接口。这是bean容器的基本客户端视图;进一步的接口,如ListableBeanFactory和ConfigurableBeanFactory可以用于特定目的。

2.接口的实现类都持有很多bean定义(BeanDefinition),每一个bean由一个唯一的字符串来唯一标识。
根据bean定义,工厂将返回包含对象的独立实例(原型设计模式),或者返回单个共享实例(单例设计模式的优越替代方案,其中实例是工厂范围内的单例)。
将返回哪种类型的实例取决于bean factory配置:API是相同的。自从Spring2.0开始,Spring提供了更多的范围根据具体的应用上下文(比如在Web环境中的"request"和"session")。

3.这种方法的要点是BeanFactory是应用程序组件的中心注册中心,并集中配置应用程序组件(例如,不再需要单个对象读取属性文件)。
参见“Expert One-on-One J2EE Design and Development”的第4章和第11章,讨论这种方法的好处。

4.注意,通常最好根据依赖注入(“推”配置)通过setter方法或构造函数配置应用程序对象,而不是使用任何形式的“拉”配置,比如BeanFactory查找。

5.通常,BeanFactory将加载存储在配置源(如XML文档)中的bean定义,并使用{@code org.springframework.beans}包配置bean。
然而,实现类可以直接在Java代码中返回它创建的Java对象当需要的时候。对于如何存储定义没有限制:LDAP、RDBMS、XML、属性文件等等。
鼓励实现类支持bean之间的引用(依赖项注入)。

6.与{@link ListableBeanFactory}中的方法相反,如果这是{@link HierarchicalBeanFactory},则该接口中的所有操作都将检查父工厂。
如果在这个工厂实例中没有找到bean,则将询问直接的父工厂。这个工厂实例中的bean应该覆盖任何父工厂中同名的bean。

7.Bean工厂实现应该尽可能地支持标准Bean生命周期接口。一套完整的初始化方法及其标准顺序为:
  7.1 BeanNameAware's {@code setBeanName}
  7.2 BeanClassLoaderAware's {@code setBeanClassLoader}
  7.3 BeanFactoryAware's {@code setBeanFactory}
  7.4 EnvironmentAware's {@code setEnvironment}
  7.5 EmbeddedValueResolverAware's {@code setEmbeddedValueResolver}
  7.6 ResourceLoaderAware's {@code setResourceLoader}
  7.7 ApplicationEventPublisherAware's {@code setApplicationEventPublisher}
  7.8 MessageSourceAware's {@code setMessageSource}
  7.9 ApplicationContextAware's {@code setApplicationContext}
  7.10 ServletContextAware's {@code setServletContext}
  7.11 {@code postProcessBeforeInitialization} methods of BeanPostProcessors
  7.12 InitializingBean's {@code afterPropertiesSet}
  7.13 a custom init-method definition
  7.14 {@code postProcessAfterInitialization} methods of BeanPostProcessors

8.在关闭bean工厂时,应用以下生命周期方法:
  8.1 {@code postProcessBeforeDestruction} methods of DestructionAwareBeanPostProcessors
  8.2 DisposableBean's {@code destroy}
  8.3 a custom destroy-method definition

二、常量
  /*
  用于区分FactoryBean和普通的Bean,如果一个bean是FactoryBean那么getBean("beanname")将返回的是FactoryBean所创建的对象,而不是这个工厂bean本身,
  如果想要返回工厂bean本身,可以通过getBean("&beanname")来获取。
  */
  String FACTORY_BEAN_PREFIX = "&";

三、常用方法
  /*
   1. 返回指定的bean的一个单例的或者是原型的一个实例。这个方法允许Spring BeanFactory作为单例或者原型模式的替换。
   对于单例bean,调用者可以保留对返回对象的引用。
   2. 将别名转换回相应的规范bean名称。如果在工厂实例中不能找到bean,将询问父工厂。
   @param name 被检索的bean的名称
   @return bean的实例
   @throws NoSuchBeanDefinitionException 如果使用指定的bean名称没有知道bean的定义,将抛出这个异常
   @throws BeansException 如果这个bean不能被获取,将抛出该异常
  */
  3.1 Object getBean(String name) throws BeansException;

  /*
    返回唯一匹配给定对象类型(如果有的话)的bean实例。
    1.该方法会进入{@link ListableBeanFactory}按类型查找区域,但也可以根据给定类型的名称将其转换为传统的按名称查找。
    对于更广泛的跨bean集合的检索操作,可以使用{@link ListableBeanFactory}和/或{@link BeanFactoryUtils}。
    @param requiredType 必须匹配的类型,可以是接口或者父类,但不允许为null
    @return 匹配指定类型的单个bean的实例
    @throws NoSuchBeanDefinitionException 没有找到给定类型的bean
    @throws NoUniqueBeanDefinitionException 如果找到超过一个能匹配指定类型的bean
    @throws BeansException 如果bean不能被创建
  */
  3.2 <T> T getBean(Class<T> requiredType) throws BeansException;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值