时隔很多天的我又回来....最近发展了一下自己的爱好,所以拖了很长时间。

前面我们从概念性上分析了spring的特性

这里我们附上Spring框架的结构图

我们简单的来说一些这个框架图

我们从下往上看

1.测试部分Test

Spring提供的测试部分非常重要,这个SpringTest可以帮助我们在服务器上完成测试(即不用每次都重启服务器去测试),跟Junit的测试一样。而且这个SpringTest是可以配合Junit使用的。

2.Spring的核心部分

这里有4个部分 Beans Core Context ExpressionLanguage

Beans 是关于创建Bean和管理Bean的一些类

Core 部分就不多说了,一般核心部分都是最底层的东西

Context 负责上下文的一些类

ExpressionLanguage EL表达式。跟Struts2的OGNL表达式类似

3.AOP,Aspects

这个部分的Instrumentation我没用过,看到的也很少,所以这里就不提了。欢迎评论区补充。这层是切面层。关于AOP,Aspects这里不再做过多的解释了

4.WEB层

主要是关联一些其他的框架,如Struts,SpringMVC,还有一些远程调用。

5.Data Access层

这部分是事务管理和数据源部分。spring有自己的jdbc模版,jdbcTemplate。同样Spring也为其他ORM框架提供了交互层,如:Hibernate,Mybatis,JPA等

IOC是如何工作的呢?

这就是本章我们要研究的问题

1.spring容器

前面我们讲了SpringIOC容器的概念。现在我们通过源码来看一下,SpringIOC容器是什么。

Spring的容器并不是只有一个,Spring自带了多个容器实现,大致可以分为两类

①BeanFactory,提供最基本的DI功能

图1.1 beanFactory的方法

再看一下它的基本实现类

②应用上下文ApplicationContext,它是基于BeanFactory。除了支持基本的DI功能,还支持从属性文件解析文本,以及发布事件给事件监听者,该接口继承多个其他的接口。

 

图1.2-1 Application接口

我们常用的几个Spring容器的具体实现有:

1.ClassPathXmlApplicationContext

2.FileSystemXmlApplicationContext

这两个是我们在本地引用xml配置文件时用的IOC容器,web的IOC容器我们在后面讨论。这个小节我们讨论IOC容器的具体工作。

Spring加载bean通常称为装配,以下是其中一种模式(XML显示装配)

ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("beans.xml");
Car car =app.getBean(Car.class);
System.out.println(car.getBrand()+","+car.getDesc());

以上一段代码包含以下几点:

1.读取配置文件beans.xml

2.根据beans.xml中的配置,找到对应的类的配置并实例化

3.调用实例化后的实例。

实际这3步里执行了多少逻辑对我们是透明的,这几步也许就是它的原理了..

蓝色颜色标注的为相同的(因为线确实扯不过来....),红色的为基本的常用的Spring容器

这是spring的IOC容器的体系结构,了解一下。下一节,来了解IOC容器是如何初始化的。

1.2浅谈Spring-Spring结构的更多相关文章

  1. 浅谈对Spring Framework的认识

    Spring Framework,作为一个应用框架,官方的介绍如下: The Spring Framework provides a comprehensive programming and con ...

  2. 浅谈使用spring security中的BCryptPasswordEncoder方法对密码进行加密与密码匹配

    浅谈使用springsecurity中的BCryptPasswordEncoder方法对密码进行加密(encode)与密码匹配(matches) spring security中的BCryptPass ...

  3. 浅谈c语言结构体

    对于很多非计算机专业来说,c语言课程基本上指针都不怎么讲,更别说后面的结构体了.这造成很多学生对结构体的不熟悉.这里我就浅谈一下我对结构体的认识. 结构体,就是我们自己定义出一种新的类型,定义好之后, ...

  4. Spring 学习教程(一):浅谈对Spring IOC以及DI的理解

    一.个人对IoC(控制反转)和DI(依赖注入)的理解我们平时在开发java web程序的时候,每个对象在需要使用它的合作对象时,自己都要将它要合作对象创建出来(比如 new 对象),这个合作对象是由自 ...

  5. 浅谈C/C++结构体内存分配问题

    .wiz-todo, .wiz-todo-img {width: 16px; height: 16px; cursor: default; padding: 0 10px 0 2px; vertica ...

  6. 浅谈 System.Decimal 结构

    引言 我们知道,Microsoft .NET Framework 中的 System.Decimal 结构(在 C# 语言中等价于 decimal keyword)用来表示十进制数,范围从 -(296 ...

  7. 浅谈linux虚拟内存结构

    一个虚拟存储器系统要求硬件和软件之间紧密写作(mmu(内存管理单元,虚拟地址到物理地址的翻译),TLB块表(虚拟地址到物理地址index,虚拟寻址),l1,l2,l3高速缓存(物理单元数据)物理寻址) ...

  8. 浅谈JVM - 内存结构(二)- 虚拟机栈|凡酷

    2.1 定义 Java Virtual Machine Stacks(Java虚拟机栈) Java 虚拟机栈描述的是 Java 方法执行的内存模型,用于存储栈帧,是线程私有的,生命周期随着线程启动而产 ...

  9. Spring缓存框架原理浅谈

    运维在上线,无聊写博客.最近看了下Spring的缓存框架,这里写一下 1.Spring 缓存框架 原理浅谈 2.Spring 缓存框架 注解使用说明 3.Spring 缓存配置 + Ehcache(默 ...

  10. 浅谈Spring MVC知识

    关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说.”其实我们都知道这个问题还需要问的,只要你是一个开发人员 ...

随机推荐

  1. win10 家庭版不支持gpedit.msc的解决办法

    win10 家庭版不支持gpedit.msc的解决办法 1.建立一个批处理文件内容如下: @echo off pushd "%~dp0" dir /b %systemroot%\W ...

  2. 本地系统服务例程:Nt和Zw系列函数

    Windows本地操作系统服务API由一系列以Nt或Zw为前缀的函数实现的,这些函数以内核模式运行,内核驱动可以直接调用这些函数,而用户层程序只能通过系统进行调用.通常情况下用户层应用程序不会直接调用 ...

  3. oracle EM 如何调整界面显示的语言

    EM是通过浏览器语言来识别界面语言的,没有选项调整.我以chrome为例将默认中文改为英文: EM调整前为中文界面: 调整chrome语言显示为英文: 再重新开一个窗口,打开EM,界面已经调整为英文了 ...

  4. the security settings could not be applied to the database(mysql安装error)【简记】

    在安装mysql时,出现“The security settings could not be applied to the database because the connection has f ...

  5. 使用Visual Studio Code进行ABAP开发

    长期以来,我们都使用SAP GUI进行ABAP编码工作,事务代码SE38甚至成了ABAP的代名词. SAP GUI的代码编辑能力和一些专业的IDE比较起来难免相形见绌,为了给开发者们更好的体验,SAP ...

  6. Kafka设计解析(六)- Kafka高性能架构之道

    本文从宏观架构层面和微观实现层面分析了Kafka如何实现高性能.包含Kafka如何利用Partition实现并行处理和提供水平扩展能力,如何通过ISR实现可用性和数据一致性的动态平衡,如何使用NIO和 ...

  7. Git拉取、提交、迁出、合并、删除分之命令

    #拉取代码 git clone -b 分之名称 git地址 #提交代码 git add . //:注释,if是第一次提交: $ git add --all . (请注意后面有个英文点(表示是当前目录) ...

  8. 1.5 下载和安装VMWare

    搭建虚拟环境一般都有两种方法,一种是系统自带的虚拟机,还有一种是下载VMware,Win8和Win10都自带有虚拟机,但是都不是自动开启的,所以我们必须手动开启. 一.Win10开启虚拟机 在命令行输 ...

  9. 搭建vue.js环境

    一.安装Node.js (以下安装环境均为win10) 下载链接:https://nodejs.org/en/download/ 官网给出了两个版本,LTS和Curren.字面意思是推荐大多数用户使用 ...

  10. linux安装OpenCV以及windows安装numpy、cv2等python2.7模块

    OpenCV(Open Source Computer Vision Library) 是一个基于BSD许可(开源)发行的跨平台计算机视觉库,它具有C ++,C,Python和Java接口,可以运行在 ...