Spring-核心组件

Spring总体框架: 
    Spring核心组件只有三个:Core、Context和Bean。(特色功能:Web、AOP、Transaction、JDBC、JMX、Orm等。)
    首先先介绍下Spring的设计理念,前面说的Spring的三个核心组件,如果要在他们三个选出核心,那就非Bean组件莫属了,为何这样说,其实Spring就是面向Bean的编程(Bean Oriented Programming BOP),Bean在Spring中才是真正的主角。
    Bean在Spring中的作用就像Object对OOP的意义一样,没有对象的概念就像没有面向对象的编程,在Spring中没有Bean也就没有Spring存在的意义。Spring为何如此流行?我们用Spring的原因是什么?你会发现原来Spring解决了一个非常关键的问题,它可以让你的对象之间的依赖关系转而用配置文件来管理,也就是它的依赖注入机制。而这个注入关系在一个叫IOC的容器中管理,那么在IOC容器中又是什么?就是被Bean包裹的对象。Spring正是通过把对象包装在Bean中从而达到管理这些对象及做一系列额外操作的目的的。
    核心组件是如何协同工作的?通俗的说法:把Bean比作一场演出中的演员,Context就是这场演出的舞台背景,而Core应该就是演出的道具了。只要他们在一起才能具备演一场好戏的基本条件。当然如果想让场演出足够精彩,这些节目就是Sping能提供的"特色功能"了。
    我们知道Bean包装的是Object,而Object必然有数据,对Context来说它就是要发现每个Bean之间的关系,所以Context就是一个Bean关系的集合,这个关系集合又叫IOC容器。Core组件又有什么作用?其实Core就是发现、简历和维护每个Bean之间的关系所需要的一系列工具。

Bean组件:
    Bean组件在Spring的org.springframework.beans包下。在这个包下的所有类主要解决了3件事:Bean的定义、Bean的创建及对Bean的解析。
   Spirng Bean的创建是典型的工厂模式,它的顶级接口是BeanFactory,它有3个子类:ListableBeanFactory、HierarchicalBeanFactory和DefaultListableBeanFactory,最终默认实现类的是DefaultListableBeanFactory,它实现了所有接口。
    Bean的一定完整地描述了再Spring的配置文件中你定义的<bean/>节点所有的信息,包括各种子节点。当Spring成功解析你定义的一个<bean/>节点后,在Spring的内部它就被转化成BeanDefinition对象,以后所有的操作都是对这个对象进行的。

Context组件:
    Context在Spring的org.springFramework.context包下,前面已经讲解了Context组件在Spring中的作用,它实际上就是给Spring提供一个运行时的环境,用以保存各个对象的状态。
    Application是Context的顶级父类,它除了能标识一个应用环境的基本信息外,还继承了5个接口,其中ApplicationContext继承了BeanFactory,这也说明了Spring容器中运行的主体对象是Bean。另外ApplicationContext继承了ResourceLoader接口,使得ApplicationContext可以访问到任何外部资源。
    ApplicationContext的子类包含两个方面:
       1.ConfigurableApplicationContext表示Context是可修改的,也就是在构建Context中,用户可以动态添加或修改已有的配置信息,它下面又有多个子类,其中最经常使用可更新的Context,即AbstractRefreshableApplicationCont类。
       2.WebApplicationContext 顾名思义就是为Web准备的Context,它可以直接访问ServletContext,在通常情况下,这个接口用得很少。
    总体来说ApplicationContext必须要完成以下几件事情:
       1.标识一个应用环境。
       2.利用BeanFactory创建Bean对象。
       3.保存对象关系表。
       4.能够捕获各种事件。
    Context作为Spring的IOC容器,基本上整合了Spring的大部分功能,或者说是大部分功能的基础。

Core组件:
    Core在org.springframework.core包下,Core组件主要就是定义了访问资源的方式,以及对于各种资源进行用统一的接口来抽象,屏蔽了具体资源的类型。资源的顶级接口为Resource,它继承自InputStreamResource,实现了其getInstream方法,这样所有的资源就是通过该方法来获取输入流的。对于资源的加载,也实现了统一,定义了一个资源加载顶级接口ResourceLoader,它默认的加载就是DefaultResourceLoader。

猜你喜欢

转载自r361251.iteye.com/blog/2219433