spring源码阅读之IOC1 欢迎点评参考

来源:互联网 发布:淘宝怎么买烟怎么搜 编辑:程序博客网 时间:2024/06/07 00:20

spring IOC有两个主要容器BeanFactory简单容器,提供最基本的IOC容器功能

而ApplicationContext应用上下文在简单容器的基础上增加了许多面向框架的特性

BeanDefinition则对应了配置文件中的<bean>


首先看下BeanFactory接口的结构下面有三个子接口和一个实现类

下面看BeanFactory源码

在BeanFactory中String FACTORY_BEAN_PREFIX = "&";&用来区分通过容器获取FactoryBean产生的对象和FactoryBean本身,如b是一个BeanFactory对象,&b得到的是FactoryBean,而不是b这个FactoryBean产生出来的对象

public boolean containsBean(String name)判断容器是否含有指定名字的Bean

boolean isSingleton(String name) throws NoSuchBeanDefinitionException;//查询指定名字的Bean是不是单例

boolean isPrototype(String name) throws NoSuchBeanDefinitionException;//查询指定名字的Bean是不是prototype类型的,与上面一个可以再BeanDefinition中定义

boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException;//查询指定名字的Bean的Class类型是否是特定的Class类型

public boolean isTypeMatch(String name, Class targetType) throws NoSuchBeanDefinitionException {

//查询指定名字的Bean的Class
Class type = getType(name);

//targetType为null时为true,不为null时并且targetType是否为type的超类或超接口
return (targetType == null || (type != null && targetType.isAssignableFrom(type)));
}

String[] getAliases(String name);//查询指定名字的Bean的所有别名


实现类:SimpleJndiBeanFactory

子接口1:AutowireCapableBeanFactory

子接口2:HierarchicalBeanFactory:多了两个方法

BeanFactory getParentBeanFactory();//返回父beanfactory,如果没有为null

boolean containsLocalBean(String name);//判断是否存在给定名称的Bean

子接口3:ListableBeanFactory


ConfigurableBeanFactory是HierarchicalBeanFactory的子接口,主要定义了一些BeanFactory的配置功能,下面看下源码

//设置父BeanFactory

void setParentBeanFactory(BeanFactory parentBeanFactory) throws IllegalStateException;

/**

BeanPostProcessor 是spring容器的一个扩展点,可以进行自定义实例化、初始化、依赖转配、依赖检查等流程,既可以覆盖默认的实例化,也可以增强初始化、依赖注入、依赖检查等流程,可以检查相应的标志接口完成一些自定义功能实现,如包装目标对象到代理对象

*/

void addBeanPostProcessor(BeanPostProcessor beanPostProcessor);


XmlBeanFactory继承DefaultListableBeanFactory,在spring中后者作为一个默认的功能完整的Ioc容器来使用,XmlBeanFactory从名字就可以看出他可以读取以xm方式定义的BeanDefinition的IOC容器。

从源码中private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);来读取xml中的数据





原创粉丝点击