spring解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring解析相关的知识,希望对你有一定的参考价值。

一、spring概述

spring是一个为了简化J2EE开发而设计的开源框架,框架将服务注入给POJO类,POJO类无需关注如何去连接服务,从而达到将应用开发与

复杂的J2EE服务解耦开来,从而简化J2EE的开发,而对于这些功能的具体实现,就要涉及到spring的核心模块IOCAOP

二、spring设计架构

spring总共有十几个组件,但真正的核心组件只有几个。

 技术分享图片

从上图可以看出,spring的核心组件只有三个ContextCorebeans,他们构成的spring

的总体架构。下面是三个组件功能的大概剖析

Bean组件:bean组件在springbeans包下,这个包下解决了三个事情,bean的定义,bean的创建以及bean的解析,其实我们只需要关心bean的创建,因为其它两个在spring的内部完成,对我们是透明的。Bean的创建在spring中的顶级接口是beanFactory,使用的是典型的工程模式。

技术分享图片 

Bean的定义就是完整描述在spring配置文件中你定义的节点中的所有信息,包括各种子节点成功解析后就会生成一个beanDefinition类,以后所有的操作都有这个对象完成。

技术分享图片 

Context组件:Context组件在springcontext包下,它的顶级父类是ApplicationContextcontext组件实际上是给spring提供一个运行时环境,以保存各个对象的状态。

 技术分享图片

从上图可以看出,ApplicationContext集成了BeanFactory,说明spring容器运行的主体对象是bean,另外它还继承了ResourceLoader接口,也就是说它可以访问任何外部资源。总结一下,ApplicationContext必须要完成以下几件事情:1.标识一个应用环境2.利用beanFactory创建bean对象3.保存对象关系表4.能够捕获各种事件。Context作为spring的核心容器,基本整合了spring的大部分基础功能。

Core组件:Core包含了许多关键类,其中一个重要的组成部分是定义了定义了外部资源的访问方式。

 

并且它与Context建立了联系,也就是说Conotext将资源加载技术分享图片的工作委任给了Core中的相关类来完成。

 

.什么是IOC

英文全称Inversion of control,是控制反转的意思,对于spring框架来说,本来由程序员控制管理的对象,现在全部交给spring框架来处理,也就是说由spring来控制对象的生命周期和对象之间的关系。spring所倡导的开发方式就是,所有的类都会在springIOC容器中等记,你只需要告诉spring,你是谁,你需要啥,spring就会主动将东西给你,同时也会把你交给其他需要你的东西。所有类对象的创建和销毁都是由spring来控制的,这就是控制反转。

IOC的一个重点是在系统运行时,动态的向某个对象提供它所需要的其他对象,这一点是通过依赖注入来实现的。传统软件的开发中,当我们需要在一个类中依赖其他对象时,往往会在构造方法中创造该对象,这样耦合度很高,而在spring中,我们不需要这样做,只需要告诉spring我们需的,sping会在适当时候将我们所需要的对象注入到相应的类中,spring中注入的方式有三种:1.setter方法注入 2.构造器注入 3.接口注入这样就完成了各个对象之间关系的控制。spring中依赖注入是通过反射来实现的,Java1.3之后有一个重要的特征就是反射,它允许程序在运行的时候动态的生成对象,执行对象的方法,改变对象的属性。

我们可以使用反射简单的模拟spring的依赖注入(具体代码先不写,自己查):

总结一下步骤:1.通过dom4jbean.xml进行解析,拿到所配置的对象的所有的信息,将信息保存到hashMap当中,之后就可以调用getBean()方法得到对应的信息

2.采用反射机制,利用从hashMap中获得的信息实例化对象,并且将属性进行注入,属性注入也是通过反射获得setter方法调用进行注入

3.那么属性注入是调用setter方法,对象的依赖注入又该如何?其实和属性注入差不多,spring容器在启动时会实例化所有的bean,那么每个bean所在地引用地址容器也必然知道,将一个对象注入到另一个对象中其实就是吧对象的应用地址复制给相应的变量qaq

.什么是AOP

AOP面向切面编程,可以说是OOP的补充和完善因为OOP适合从上到下而不适合从左到右,AOP补足了这个缺点,它利用一种称为“横切”的技术将对象剖开, 将那些影响了多个类的公共行为封装到一个可重用的模块,这样减少了系统的可重用代码,降低了模块间的耦合度,并有利于未来的可操作性和维护。

实现AOP的技术主要有两大类:动态代理和静态织入。动态代理参见博客‘动态代理的实现’

AOP的使用场景:

技术分享图片 

AOP的相关概念:

技术分享图片 

如何使用AOP

技术分享图片 


以上是关于spring解析的主要内容,如果未能解决你的问题,请参考以下文章

Spring Aware接口解析

转spring源码解析

源码解析:Spring源码解析笔记

Spring源代码解析(收藏)

Spring Tx源码解析(二)

Spring源码深度解析pdf