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的更多相关文章

  1. SSM框架开发web项目系列(五) Spring集成MyBatis

    前言 在前面的MyBatis部分内容中,我们已经可以独立的基于MyBatis构建一个数据库访问层应用,但是在实际的项目开发中,我们的程序不会这么简单,层次也更加复杂,除了这里说到的持久层,还有业务逻辑 ...

  2. ASP.NET MVC开发必看系列

    一.关于HTTP协议的那些事 这可以说我们开发WEB程序的空气,推荐不断温故知新! HTTP协议 (一) HTTP协议详解 HTTP协议 (二) 基本认证 HTTP协议 (三) 压缩 HTTP协议 ( ...

  3. Springboot 系列(五)Spring Boot web 开发之静态资源和模版引擎

    前言 Spring Boot 天生的适合 web 应用开发,它可以快速的嵌入 Tomcat, Jetty 或 Netty 用于包含一个 HTTP 服务器.且开发十分简单,只需要引入 web 开发所需的 ...

  4. Spring基础知识汇总 Java开发必看

    Spring简介 Spring框架由Rod Johnson开发,2004年发布了Spring框架的第一版.Spring是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅 ...

  5. Visual Studio (VS IDE) 你必须知道的功能和技巧 - 【.Net必知系列】

    前言 本文主要阐述一些Visual Studio开发下需要知道的少部分且比较实用的功能,也是很多人忽略的部分.一些不常用而且冷门的功能不在本文范围,当然本文的尾巴[.Net必知系列]纯属意淫,如有雷同 ...

  6. Java开发必会的Linux命令

    Java开发必会的Linux命令 作为一个Java开发人员,有些常用的Linux命令必须掌握.即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令.因为很多服务器 ...

  7. SSM框架开发web项目系列(二) MyBatis真正的力量

    前言 上篇SSM框架环境搭建篇,演示了我们进行web开发必不可少的一些配置和准备工作,如果这方面还有疑问的地方,可以先参考上一篇“SSM框架开发web项目系列(一) 环境搭建篇”.本文主要介绍MyBa ...

  8. Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览

    关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/15/springboot2_code/ 项目结构 结构分析: Spring-boot-pr ...

  9. Springboot 系列(一)Spring Boot 入门篇

    注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 由于 J2EE 的开发变得笨重,繁多的配置, ...

  10. 朱晔和你聊Spring系列S1E1:聊聊Spring家族的几大件

    朱晔和你聊Spring系列S1E1:聊聊Spring家族的几大件 [下载本文PDF进行阅读] Spring家族很庞大,从最早先出现的服务于企业级程序开发的Core.安全方面的Security.到后来的 ...

随机推荐

  1. NC24755 [USACO 2010 Dec S]Apple Delivery

    题目链接 题目 题目描述 Bessie has two crisp red apples to deliver to two of her friends in the herd. Of course ...

  2. SVG与foreignObject元素

    SVG与foreignObject元素 可缩放矢量图形Scalable Vector Graphics - SVG基于XML标记语言,用于描述二维的矢量图形.作为一个基于文本的开放网络标准,SVG能够 ...

  3. wordpress设置固定链接404及伪静态配置

    说明 最近在将wordpress设置中文章url修改为月份和名称型 之后访问文章出现404.原因是配有配置好apache的伪静态. 配置步骤 1.修改httpd.conf 我这里是centos7,默认 ...

  4. Annotation-specified bean name conflicts with existing

    问题说明 Annotation-specified bean name conflicts with existing,non-compatible bean definition of same n ...

  5. VS2019 添加三方文件夹遇到的坑

    在开发新项目时需要用到一些三方 API,这些三方 API 没有生成 lib,所以我们在 VS 编译器中添加这些三方文件夹的头文件路径后 会出现 ERROR LNK2019 的错误提示,这些提示通常都是 ...

  6. rpartition和partition按分割符分割

    # rpartition 从目标字符串的末尾也就是右边开始搜索分割符,如果字符串包含指定的分割符 则返回一个3元的元组,第一个为分割符左边的子串,第二个为分割符本身, 第三个为分割符右边的字串. st ...

  7. 面试官:Redis如何保证高可用?

    Redis 高可用(High Availability,HA)是指 Redis 通过一系列技术手段确保在面临故障的情况下也能持续提供服务的能力. Redis 作为一个内存数据库,其数据通常存储在内存中 ...

  8. 详解SSL证书系列(3)如何选择SSL证书

    我们知道了在网站部署 SSL 证书后,不管是对网站本身还是对网站的用户都能够带来许多好处.那么随着 HTTPS的普及,市面上也出现了各种不同的 SSL 证书.并且由于 SSL 证书的多样性,很多人对于 ...

  9. 【Azure 环境】ARM部署模板大于4MB的解决方案及Linked Template遇见存储账号防火墙无法访问

    问题一:在ADF Pipeline部署ARM Template报错"Deployment failed -- the request content size exceeds the max ...

  10. 【Azure 应用服务】在App Service 中如何通过Managed Identity获取访问Azure资源的Token呢? 如Key Vault

    问题描述 当App Service启用了Managed Identity后,Azure中的资源就可以使用此Identity访问. 如果需要显示的获取这个Token,如何实现呢? 问题解答 在App S ...