1.2浅谈Spring-Spring结构
时隔很多天的我又回来....最近发展了一下自己的爱好,所以拖了很长时间。
前面我们从概念性上分析了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结构的更多相关文章
- 浅谈对Spring Framework的认识
Spring Framework,作为一个应用框架,官方的介绍如下: The Spring Framework provides a comprehensive programming and con ...
- 浅谈使用spring security中的BCryptPasswordEncoder方法对密码进行加密与密码匹配
浅谈使用springsecurity中的BCryptPasswordEncoder方法对密码进行加密(encode)与密码匹配(matches) spring security中的BCryptPass ...
- 浅谈c语言结构体
对于很多非计算机专业来说,c语言课程基本上指针都不怎么讲,更别说后面的结构体了.这造成很多学生对结构体的不熟悉.这里我就浅谈一下我对结构体的认识. 结构体,就是我们自己定义出一种新的类型,定义好之后, ...
- Spring 学习教程(一):浅谈对Spring IOC以及DI的理解
一.个人对IoC(控制反转)和DI(依赖注入)的理解我们平时在开发java web程序的时候,每个对象在需要使用它的合作对象时,自己都要将它要合作对象创建出来(比如 new 对象),这个合作对象是由自 ...
- 浅谈C/C++结构体内存分配问题
.wiz-todo, .wiz-todo-img {width: 16px; height: 16px; cursor: default; padding: 0 10px 0 2px; vertica ...
- 浅谈 System.Decimal 结构
引言 我们知道,Microsoft .NET Framework 中的 System.Decimal 结构(在 C# 语言中等价于 decimal keyword)用来表示十进制数,范围从 -(296 ...
- 浅谈linux虚拟内存结构
一个虚拟存储器系统要求硬件和软件之间紧密写作(mmu(内存管理单元,虚拟地址到物理地址的翻译),TLB块表(虚拟地址到物理地址index,虚拟寻址),l1,l2,l3高速缓存(物理单元数据)物理寻址) ...
- 浅谈JVM - 内存结构(二)- 虚拟机栈|凡酷
2.1 定义 Java Virtual Machine Stacks(Java虚拟机栈) Java 虚拟机栈描述的是 Java 方法执行的内存模型,用于存储栈帧,是线程私有的,生命周期随着线程启动而产 ...
- Spring缓存框架原理浅谈
运维在上线,无聊写博客.最近看了下Spring的缓存框架,这里写一下 1.Spring 缓存框架 原理浅谈 2.Spring 缓存框架 注解使用说明 3.Spring 缓存配置 + Ehcache(默 ...
- 浅谈Spring MVC知识
关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说.”其实我们都知道这个问题还需要问的,只要你是一个开发人员 ...
随机推荐
- centos下Django+uwsgi+nginx
本篇章主要讲解uwsgi和nginx的作用,并利用两者对django项目进行部署 一.概述 在开发过程中,我们一般是在该项目的虚拟环境中启用django自带的web服务:python manage.p ...
- c/c++ 多线程 利用条件变量实现线程安全的队列
多线程 利用条件变量实现线程安全的队列 背景:标准STL库的队列queue是线程不安全的. 利用条件变量(Condition variable)简单实现一个线程安全的队列. 代码: #include ...
- c#操作SQL Server入门总结
我是一名c#新手.本文只是我是常学习的随笔. 一.下载SQL server软件 听说下载开发板是最好的(开发板如果只是用来学习.研究不算是侵权).在安装的时候,我也遇到了很多问题,在公司的电脑安装第一 ...
- python import详解
1.import作用 引入模块 2.import的特点 一个程序中,import的模块不会重复被引用,如: # test1.py import test2 print test2.attr # tes ...
- find mtime参数+号,-号,不带符号的用法
find . -mtime +0 -type f -name "oms*" | xargs rm -f 删除24小时以前 oms格式的文件 #按文件更改时间来查找文件,- ...
- 【区块链】【一】Hash 算法【转】
问题导读1.哈希算法在区块链的作用是什么?2.什么是哈希算法?3.哈希算法是否可逆?4.比特币采用的是什么哈希算法? 作用在学习哈希算法前,我们需要知道哈希在区块链的作用哈希算法的作用如下:区块链通过 ...
- 在pycharm中查看内建函数源码
鼠标放在内建函数上,Ctrl+B,看源码
- Docker Toolbox替换默认docker machine的存储位置
使用Docker Toolbox是因为它不用打开windows的hyper-v组件,这样可以和VMware workstation一起使用. 关于如何迁移可参考:https://www.cnblogs ...
- python中打印中文
python中打印中文 在python 2.x版本中,默认是ASCII编码方式,在有业务需要输入中文时,就会出现乱码的情况.解决这种问题的一个方式就是设置py文件的编码方式.实现方式如下: 在py文件 ...
- 软工+C(7): 野生程序员
// 上一篇:最近发展区/脚手架 // 下一篇:提问和回复 怎样做足够好的软件?我们就差一个程序员! 没有什么软件工程的理论的时候,程序员们凭借自己对编程的热爱,凭借着:"这是一个可以自动化 ...