码迷,mamicode.com
首页 > 编程语言 > 详细

Spring核心组件之Bean

时间:2015-08-02 23:26:16      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:spring   bean   

Spring核心组件之Bean


Bean的类层次结构

Bean的顶层接口是BeanFactory,在源码的位置是

/spring-framework/spring-beans/src/main/java/org/springframework/beans/factory/BeanFactory.java

技术分享
DefaultListableBeanFactory实现了所有的接口。但是为什么需要定义这么多的接口?为了区分在spring的内部对象的传递和转化过程中,对对象的数据访问所做的限制。ListableBeanFactory表示这些bean是可列表的,HierarchicalBeanFactory表示这些bean是有继承关系的,AutowireCapableBeanFactory定义这些bean的自动装配规则。

Bean的定义类层次

核心是RootBeanDefinition,在源码的位置是

/spring-framework/spring-beans/src/main/java/org/springframework/beans/factory/support/RootBeanDefinition.java

技术分享

当spring成功的解析了一个

<bean></bean>

中定义的节点后,在spring的内部被转化成BeanDefinition对象。以后所有的操作都是基于这个对象的

Bean的解析过程

技术分享

Bean的解析主要是对spring的配置文件的解析。

Bean的地位

Bean在spring中的作用就像OOP对于java的作用,没有bean就没有spring存在的意义。

spring解决了一个重要的问题,把对象之间的依赖关系转用配置文件来管理,也就是依赖注入机制。依赖注入在spring的IOC容器中进行管理,而IOC容器的主要操作对象就是bean。

源代码

下面是BeanFactory的源码,在BeanFactory里只对IOC容器的基本行为作了定义,至于如何产生具体的bean,由BeanFactory的实现类具体来实现。

public interface BeanFactory {

    /**
     * 这里是对FactoryBean的转义定义,因为如果使用bean的名字检索FactoryBean得到的对象是工厂生成的对象,  如果需要得到工厂本身,需要转义
     */
    String FACTORY_BEAN_PREFIX = "&";

    //这里根据bean的名字,在IOC容器中得到bean实例,这个IOC容器就是一个大的抽象工厂。
    Object getBean(String name) throws BeansException;

    //这里根据bean的名字和Class类型来得到bean实例,如果根据名字取得的bean实例的Class类型和需要的不同的话,它会抛出异常
    <T> T getBean(String name, Class<T> requiredType) throws BeansException;

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

    <T> T getBean(Class<T> requiredType, Object... args) throws BeansException;

    //这里提供对bean的检索,看看是否在IOC容器有这个名字的bean
    boolean containsBean(String name);

     //这里根据bean名字得到bean实例,并同时判断这个bean是不是单例
    boolean isSingleton(String name) throws NoSuchBeanDefinitionException;

    //判断给定名字的bean是不是Prototype
    boolean isPrototype(String name) throws NoSuchBeanDefinitionException;

    boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;

    //判断给定名字的bean是否与给定的类型相匹配
    boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;

    //这里对得到bean实例的Class类型  
    Class<?> getType(String name) throws NoSuchBeanDefinitionException;

    //这里得到bean的别名,如果根据别名检索,那么其原名也会被检索出来 
    String[] getAliases(String name);

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Spring核心组件之Bean

标签:spring   bean   

原文地址:http://blog.csdn.net/weiyongxuan/article/details/47213231

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!