最近在复习一些关于框架的概念性问题,主要是为了最近的面试,怕被问到这些概念性的问题。不过在真正做开发的时候还是要好好理解这些框架的基本原理,以及它们的工作流程。这样,我们才能更好的使用这些框架。下面就谈谈我对Spring框架的一些理解。

Spring是一个开源框架,实际上就是一种容器,是一种实现了IOC模式的容器,也可以说是一个Bean的工厂,对Bean进行管理,它的两个重要特征是IOC和AOP。

IOC(Inversion of Control)控制反转:将类的创建和依赖关系写在spring的配置文件中,由配置文件在程序运行的时候动态注入,这样就实现轻耦合。

AOP(Aspect Oriented Programming)面向切面编程:将安全、事务、log等公共的服务对于程序逻辑相对独立的功能抽取出来,利用spring的配置文件将这些功能在程序运行的时候动态的插进去,让程序员更专注于业务逻辑的实现,实现了按照方面编程,提高了可维护性和复用性 

           介绍Spring的核心

Spring的核心是个轻量级容器(container),实现了IoC(Inversion of Control)模式的容器,Spring的目标是实现一个全方位的整合框架,在Spring框架下实现多个子框架的组合,这些子框架之间彼此可以独立,也可以使用其它的框架方案加以替代,Spring希望提供one-stop shop的框架整合方案 。

Spring不会特別去提出一些子框架来与现有的开源框架竞争,除非它觉得所提出的框架夠新夠好,例如Spring有自己的 MVC框架方案,因为它觉得现有的MVC方案有很多可以改进的地方,但它不强迫您使用它提供的方案,您可以选用您所希望的框架来取代其子框架,例如您仍可以在Spring中整合您的Struts框架 。

Spring的核心概念是IoC,IoC的抽象概念是「依赖关系的转移」,像是「高层模组不应该依赖低层模组,而是模组都必须依赖于抽象」是 IoC的一种表现,「实现必须依赖抽象,而不是抽象依赖实现」也是IoC的一种表现,「应用程序不应依赖于容器,而是容器服务于应用程序」也是IoC的一种表现。

其核心容器:提供基本功能,主要核心 BeanFactory 工厂模式的实现,使用控制反转 (依 赖注入)实现.让Bean 与 Bean 之间以配置文件组织在一起,而不是以硬编码的方式耦合在一起.创建实例由spring容器来完成.创建对象的控制权由调用者交给了容器来管理,这就是控制反转名字的由来.

  所谓依赖注入,是指在程序运行过程中,当需要被调用时,由容器自己提供被调用者的实例,调用者与被调用者都处于spring管理下,二者之间的以来关系有spring提供.

spring框架的核心思想是建立一个java对象的工厂,用户只要给工厂一个指令,工厂就能将用户需要的对象根据配置文件组装好还给用户.

业务层service 控制层 Action  持久层 DAO  各层之间调用完全面向接口,无需关心其具体实现的类,当重构代码时,改写量将大大减少.

在SSH框架中spring充当了管理容器的角色。我们都知道Hibernate用来做持久层,因

为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语句。Struts是用来做应用层的,他它负责调用业务逻辑serivce层。所以SSH框架的流程大致是:Jsp页面----Struts------Service(业务逻辑处理类)---Hibernate(左到右)struts负责控制Service(业务逻辑处理类),从而控制了Service的生命周期,这样层与层之间的依赖和强,属于耦合。这时,使用spring框架就起到了控制Action对象(Strus中的)和Service类的作用,两者之间的关系就松散了,Spring的Ioc机制(控制反转和依赖注入)正是用在此处。

Spring的Ioc(控制反转和依赖注入)

控制反转:就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。

依赖注入:组件之间的依赖关系由容器在运行期决定 ,由容器动态的将某种依赖关系注入到组件之中。

使用Spring的第二个好处(AOP应用):

事务的处理:

在以往的JDBCTemplate中事务提交成功,异常处理都是通过Try/Catch 来完成,而在Spring中。Spring容器集成了TransactionTemplate,她封装了所有对事务处理的功能,包括异常时事务回滚,操作成功时数据提交等复杂业务功能。这都是由Spring容器来管理,大大减少了程序员的代码量,也对事务有了很好的管理控制。Hibernate中也有对事务的管理,hibernate中事务管理是通过SessionFactory创建和维护Session来完成。而Spring对SessionFactory配置也进行了整合,不需要在通过hibernate.cfg.xml来对SessionaFactory进行设定。这样的话就可以很好的利用Sping对事务管理强大功能。避免了每次对数据操作都要现获得Session实例来启动事务/提交/回滚事务还有繁琐的Try/Catch操作。这些也就是Spring中的AOP(面向切面编程)机制很好的应用。一方面使开发业务逻辑更清晰、专业分工更加容易进行。另一方面就是应用Spirng  AOP隔离降低了程序的耦合性使我们可以在不同的应用中将各个切面结合起来使用大大提高了代码重用度。

以上是我对Spring框架的一些个人理解,如有错误望大神指出,好让小弟早日改正错误,更好的运用Spring。

转载于:https://www.cnblogs.com/jiangu66/p/3237170.html

对Spring的一些理解相关推荐

  1. 谈谈对Spring IOC的理解

    2019独角兽企业重金招聘Python工程师标准>>> 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人 ...

  2. Spring IOC的理解总结

    1.1.IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制, ...

  3. 谈谈我对Spring IOC的理解

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...

  4. 沉淀再出发:Spring的架构理解

    沉淀再出发:Spring的架构理解 一.前言 在Spring之前使用的EJB框架太庞大和重量级了,开发成本很高,由此spring应运而生.关于Spring,学过java的人基本上都会慢慢接触到,并且在 ...

  5. 对Spring IOC的理解

    1.2.IoC能做什么 IoC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合.更优良的程序.传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间 ...

  6. 对于Spring MCV的理解

    对于Spring MCV的理解 1.什么是Spring MCV? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Contro ...

  7. 谈谈Spring Ioc的理解

    原文:http://blog.csdn.net/qq_22654611/article/details/52606960 学了几天Ioc了,但是对它的理解还是模模糊糊,看了这篇博客感觉对Ioc有了更深 ...

  8. 浅谈Spring IOC的理解

    浅谈Spring IOC的理解 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊 ...

  9. Spring和Spring Framework的理解

    文章目录 Spring和Spring Framework 1.Bean容器 2.IOC 3.DI 4.Bean的生命周期 BeanFactory和ApplicationContext Spring和S ...

  10. 对于spring boot的理解

    转载自:https://blog.csdn.net/ricohzhanglong/article/details/80240715 Spring Boot在众多从事Java微服务开发的程序员群体中是一 ...

最新文章

  1. 列标题 如何删除gridcontrol_DEV控件GridControl常用属性设置(转)
  2. Vue2.0 Transition常见用法全解惑
  3. mysql中if在oracle怎么用_MySql和Oracle的使用
  4. 股市大涨是不是楼市就要跌了?
  5. MySQL集群搭建——主备模式
  6. 再谈 document.documentElement 与 document.body 的 scrollWidth、offsetWidth、clientWidth
  7. java 图片转成base64编码_java语言中如何将一个图片转换为base64编码的数据呢?
  8. CSS最基础的语法和三种引入方式
  9. spring-data-elasticsearch (elasticsearch 6.7.0) @Document 和 @Field 注解详解
  10. Codeforces Round #275 (Div. 2)
  11. K8S集群Calico网络组件报错BIRD is not ready: BGP not established with
  12. 拜耳2020年10个新植保制剂商业化,3个生物技术性状项目推进至上市阶段
  13. 华为机试题python版本
  14. malloc函数的使用
  15. 使用HTML5仿制的QQ音乐PC版界面
  16. vector实现 并交差 集实例
  17. 双侧检验的p值和单侧检验_t检验的时候怎么区分是单侧检验还是双侧呢?
  18. Android 谷歌拼音输入法最新发布
  19. 固定效应还是随机效应?
  20. IJCAI TEXT PAPERS

热门文章

  1. JavaScript Math.random()随机数函数
  2. 【CCCC】L2-017 人以群分 (25分),,模拟水题
  3. python加载机制_Python插件机制实现详解
  4. jquery显示与隐藏效果
  5. 计算机组成原理—Cache写策略
  6. 数据结构之查找-顺序查找,折半查找,分块查找
  7. OpenGL基础56:OpenGL简单调试
  8. C#基础16:事件与观察者模式
  9. 利用SQL建立数据库
  10. 后缀数组2.0--Height数组(bzoj 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式)