开发必会系列:为什么要用spring
Spring是于2003 年兴起的一个轻量级的Java 开发框架,开源的,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。
JavaEE 项目为何使用Spring框架?
回顾我们之前写过的程序的基本结构:
Dao、DaoImpl、Factory(其中应用到了单模式)、Service、ServiceImpl 、Action(Struts框架里的,相当于MVC的controller)等等。我们是否想过做法有哪些缺点?
使用spring前:
ServiceImpl 中用到了daoImpl 对象,那么 servieImpl 依赖于daoImpl内容, 这是一种依赖关系;Action中用到了serviceImpl,那么action依赖于serviceImpl,他们也有这种依赖关系。
另外,我们在Dao层操作数据时,hibernate 中的session创建,事务的开启和关闭, 都是我们手动在Dao层来管理的,手动调用hibernate处理事务的方法。
使用spring后:
我们可以将对象的创建以及对象之间的依赖关系、Hibernate的事务等,都由Spring框架进行操作,这样实现了程序之间的解耦、高内聚。
那这种方便具体体现在哪呢?学Spring我们需要了解几个关键的词语:
IOC:Inversion of Control(控制反转):
Ioc就是容器控制程序之间的关系,而非传统的程序代码直接控制。所谓控制反转,就是控制权由应用代码中转移到外部容器中,控制权的转移,即所谓的反转。(通俗讲:A类用到了B类中相关方法,此时A依赖于B,那么需要在A类中new实例化B,这是传统的代码控制,但是IOC描述的是控制反转,表示这种A类里面new实例化B对象的权力,不是由A操作的,而是交给Spring实例化B对象,而Spring只需要配置类和类之间依赖关系,告诉程序,A用到了B)
DI: Dependency Injection (依赖性注入):
(通俗讲:由Spring事先实例化好指定某些类,通过spring装配他们之间的依赖关系,例如:A用到B中的方法,此时spring会将实例化好的B对象,依赖注入给A,那么A就可以使用这个对象了,这个意思其实跟IOC差不多)
AOP:Aspect-Oriented Programming(面向切面编程):举个例子,比如B类调用某一个方法时,我想统计这个方法执行了多长时间,但我又懒得在程序中每一处调用B类该方法的地方,加入统计时间的代码,于是我就想,可不可以让系统自动地,在所有执行这个B类方法的地方,都调用我的统计时间的代码呢?AOP就可以。spring中,有两种实现方法,一种是针对方法名的,即:在配置类中,或者配置文件中,指明哪个方法名执行时,会触发我自定义的统计时间的方法;另一种是针对注解的,即:自定义一个注解,在你要统计时间的函数上,加上这个注解,然后在配置类中,对这个注解,定义你要执行的统计时间的代码即可。这就是切面。
ORM:对象关系映射(hibernate和ibatis框架,将我们的表,对应到vo类,或对应到配置xml文件映射表)
所以,具体的方便,就体现在Spring的核心——IOC。
IOC容器提供了Srping的基本功能,其主要组件是BeanFactory,他是工厂模式的实现,BeanFactory使用控制反转(IOC) 模式,将应用程序的配置和依赖性规范与实际的应用程序代码分开(通俗讲:就是将要实例化的对象,由Srping框架事先完成,BeanFactory中存放的就是所有实例化好的对象)。
我们在代码里,直接用@Resource或@Autowired就能拿到这个bean,这个bean的作用域可以自己设置,有五种,如下图

最后了解一下Srping源文件包的内容:
以3.1.4为例,源文件目录结构如下:
Dist:存放Spring的核心Jar文件、
Docs:存放源码API和spring框架使用的API等;
Projects:存放spring实例;
Src:spring框架的所有源码;
开发必会系列:为什么要用spring的更多相关文章
- SSM框架开发web项目系列(五) Spring集成MyBatis
前言 在前面的MyBatis部分内容中,我们已经可以独立的基于MyBatis构建一个数据库访问层应用,但是在实际的项目开发中,我们的程序不会这么简单,层次也更加复杂,除了这里说到的持久层,还有业务逻辑 ...
- ASP.NET MVC开发必看系列
一.关于HTTP协议的那些事 这可以说我们开发WEB程序的空气,推荐不断温故知新! HTTP协议 (一) HTTP协议详解 HTTP协议 (二) 基本认证 HTTP协议 (三) 压缩 HTTP协议 ( ...
- Springboot 系列(五)Spring Boot web 开发之静态资源和模版引擎
前言 Spring Boot 天生的适合 web 应用开发,它可以快速的嵌入 Tomcat, Jetty 或 Netty 用于包含一个 HTTP 服务器.且开发十分简单,只需要引入 web 开发所需的 ...
- Spring基础知识汇总 Java开发必看
Spring简介 Spring框架由Rod Johnson开发,2004年发布了Spring框架的第一版.Spring是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅 ...
- Visual Studio (VS IDE) 你必须知道的功能和技巧 - 【.Net必知系列】
前言 本文主要阐述一些Visual Studio开发下需要知道的少部分且比较实用的功能,也是很多人忽略的部分.一些不常用而且冷门的功能不在本文范围,当然本文的尾巴[.Net必知系列]纯属意淫,如有雷同 ...
- Java开发必会的Linux命令
Java开发必会的Linux命令 作为一个Java开发人员,有些常用的Linux命令必须掌握.即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令.因为很多服务器 ...
- SSM框架开发web项目系列(二) MyBatis真正的力量
前言 上篇SSM框架环境搭建篇,演示了我们进行web开发必不可少的一些配置和准备工作,如果这方面还有疑问的地方,可以先参考上一篇“SSM框架开发web项目系列(一) 环境搭建篇”.本文主要介绍MyBa ...
- Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览
关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/15/springboot2_code/ 项目结构 结构分析: Spring-boot-pr ...
- Springboot 系列(一)Spring Boot 入门篇
注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 由于 J2EE 的开发变得笨重,繁多的配置, ...
- 朱晔和你聊Spring系列S1E1:聊聊Spring家族的几大件
朱晔和你聊Spring系列S1E1:聊聊Spring家族的几大件 [下载本文PDF进行阅读] Spring家族很庞大,从最早先出现的服务于企业级程序开发的Core.安全方面的Security.到后来的 ...
随机推荐
- Pandas分析泰坦尼克号生还比例
提出问题 影响乘客生还的因素很多,这里只对乘客的性别.年龄.乘客等级.这三个因素感兴趣, 看看这四个因素是否会影响乘客的生还率. 1.性别是否会影响生还率 2.年龄是否会影响生还率 3.乘客等级会否会 ...
- 49从零开始用Rust编写nginx,我竟然在同一个端口上绑定了多少IP
wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 负载均衡, 静态文件服务器,websocket代理,四层TCP/UDP转发,内网穿透等,会将实 ...
- WebAssembly照亮了 Web端软件的未来
WebAssembly的发展历程相对较短,但影响深远.WebAssembly 于 2015 年首次发布,先驱技术是来自Mozilla的asm.js和Google Native Client,最初的实现 ...
- OCR 02: Tesseract-OCR
Catalog OCR 01: EasyOCR OCR 02: Tesseract-OCR OCR 03: PaddleOCR Project Host And Brief Official Site ...
- 【Unity3D】UGUI之Button
1 Button属性面板 在 Hierarchy 窗口右键,选择 UI 列表里的 Button 控件,即可创建 Button 控件,选中创建的 Button 控件,按键盘[T]键,可以调整 But ...
- 基于keras的卷积神经网络(CNN)
1 前言 本文以MNIST手写数字分类为例,讲解使用一维卷积和二维卷积实现 CNN 模型.关于 MNIST 数据集的说明,见使用TensorFlow实现MNIST数据集分类.实验中主要用到 Conv1 ...
- 多线程系列(四) -volatile关键字使用详解
一.简介 在上篇文章中,我们介绍到在多线程环境下,如果编程不当,可能会出现程序运行结果混乱的问题. 出现这个原因主要是,JMM 中主内存和线程工作内存的数据不一致,以及多个线程执行时无序,共同导致的结 ...
- Git合并固定分支的某一部分至当前分支
在 Git 中,通常使用 git merge 命令来将一个分支的更改合并到另一个分支.如果你只想合并某个分支的一部分代码,可以使用以下两种方法: 1.批量文件合并 1.1.创建并切换到一个新的临时分支 ...
- IDEA从o开始的一系列操作及修改配置-快捷键汇总
IDEA从o开始的一系列操作及修改配置-快捷键汇总 下载IDEA 启动idea 安装svn插件 功能快捷键 先设置提示快捷键(纯属个人喜好) 入门快捷键 查找 编辑 小功能 自动代码提示 自动导包 T ...
- 《深入理解Java虚拟机》(六) 调优策略 -- 笔记
目录 一.操作文档类功能,大量大对象直接进入老年代 问题现象 解决方法 通过单一Java虚拟机管理大量的内存 同一台服务器上部署若干Java虚拟机 二.异步请求大量累积 三.排查问题 排查问题: 可能 ...