Spring源码之BeanFactory

BeanFactory是Spring中管理Bean的核心接口,它提供了访问Bean容器的功能。接口允许通过名称或类型获取Bean,支持不同范围的Bean,并能处理依赖注入。BeanFactory还支持Bean的生命周期方法,如初始化和销毁。在关闭时,会调用特定的销毁方法。实现可以是XML、属性文件或其他方式,且鼓励支持bean间的依赖注入。
摘要由CSDN通过智能技术生成

用于访问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生命周期接口。完整的初始化方法和标准顺序是:

* <ol>
 * <li>BeanNameAware's {@code setBeanName}
 * <li>BeanClassLoaderAware's {@code setBeanClassLoader}
 * <li>BeanFactoryAware's {@code setBeanFactory}
 * <li>EnvironmentAware's {@code setEnvironment}
 * <li>EmbeddedValueResolverAware's {@code setEmbeddedValueResolver}
 * <li>ResourceLoaderAware's {@code setResourceLoader}
 * (only applicable when running in an application context)
 * <li>ApplicationEventPublisherAware's {@code setApplicationEventPublisher}
 * (only applicable when running in an application context)
 * <li>MessageSourceAware's {@code setMessageSource}
 * (only applicable when running in an application context)
 * <li>ApplicationContextAware's {@code setApplicationContext}
 * (only applicable when running in an application context)
 * <li>ServletContextAware's {@code setServletContext}
 * (only applicable when running in a web application context)
 * <li>{@code postProcessBeforeInitialization} methods of BeanPostProcessors
 * <li>InitializingBean's {@code afterPropertiesSet}
 * <li>a custom init-method definition
 * <li>{@code postProcessAfterInitialization} methods of BeanPostProcessors
 * </ol>

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

 * <ol>
 * <li>{@code postProcessBeforeDestruction} methods of DestructionAwareBeanPostProcessors
 * <li>DisposableBean's {@code destroy}
 * <li>a custom destroy-method definition
 * </ol>

Object getBean(String name) throws BeansException;

 

<T> T getBean(String name, Class<T> requiredType) throws BeansException;

 

Object getBean(String name, Object... args) throws BeansException;

 

<T> T getBean(Class<T> requiredType) throws BeansException;

 

<T> T getBean(Class<T> 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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值