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;
Spring BeanFactory
最新推荐文章于 2024-08-04 14:34:04 发布