之前一直不理解spring的一些基础特性是什么意思,虽然网上的解释也很多,但是由于我比较笨,就是看不懂,知道最近才稍微了解,下面就以通俗讲解的方式记录下来。

前言

假设我是一个没有开店经验的小老板,准备开个小超市。

方案1:自己去找店址,找货源,招聘收银员,销售员,以及给员工培训,这些都可以自己来,但是缺点是费时费力,而且自己毕竟精力有限,这些东西全部包揽那肯定就会有哪些地方出岔子。

这就像spring还没出现之前的系统开发,各个POJO以及它们之间的依赖关系需要程序员自己来维护,很累,精力不能全部集中到业务上。

方案2:发现一个叫全家的加盟平台,我只要交加盟费,全家总公司会帮我解决选址、招聘员工、培训员工等一系列事情,好处就是它们都是专业的,做这些肯定比我自己去做要高效,坏处就是我无法学习到开店经验,对全家平台会形成依赖,而且利润还要和他们分成。

这就像spring框架出现后的系统开发,程序员的项目里只要加进spring的jar包,就可以把所有的POJO创建以及它们之间的依赖关系交给spring来维护,自己专注于业务。缺点是对于初级程序员来说只要稍微学习下如何使用spring,就可以拿来即用,但是却不能理解其原理。

控制反转(IOC)

假设我的店开起来了

自己开店:我需要招聘、培训各个员工,以及给他们分派岗位。

加盟全家:全家总部给我安排招聘、培训各个员工,并且还给我一个店长,帮助自己管理员工。

IoC(Inversion of Control)中文名叫控制反转,就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由Spring负责的。这样控制权就由应用转移到了Spring,控制权的转移就是所谓反转。

依赖注入(DI)

全家给我的店长,要实现他的职责,他就要管理下面的员工,也就是说店长依赖于各个员工。

依赖注入,容器负责把依赖的具体对象注入到上层对象,而上层对象只需要提供一个接口声明。类似于hibernate一对多关系里面的inverse,把关系维护的重任交给对方,自己专心业务,与对方如何变化无关,全部由对方(spring容器)来进行维护。

所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B。

所谓倒置,你必须理解如果不倒置,会怎么着,因为A必须要有B,才可以调用B,如果不倒置,意思就是A主动获取B的实例:B b = new B(),这就是最简单的获取B实例的方法(当然还有各种设计模式可以帮助你去获得B的实例,比如工厂、Locator等等),然后你就可以调用b对象了。

所以,不倒置,意味着A要主动获取B,才能使用B;到了这里,你就应该明白了倒置的意思了。倒置就是A要调用B的话,A并不需要主动获取B,而是由其它人自动将B送上门来。

面向切面编程(AOP)

自己开店:员工上班很懒散,也不记录考勤,无法测验绩效。

加盟全家:安装一个打卡器,每天固定的两个点,上班打卡,下班打卡,哪天不想打卡,不碰他就好了,打卡机坏了,重新换台就好了,不影响。

面向切面编程,面向切面编程的目标就是分离关注点。什么是关注点呢,就是你要做的事,就是关注点。老板只关注如何卖出商品并且盈利,员工上班下班打卡老板不会亲自去守在那儿查看。AOP的好处就是你只需要干你的正事,其它事情别人帮你干。

从Spring的角度看,AOP最大的用途就在于提供了事务管理的能力。事务管理就是一个关注点,你的正事就是去访问数据库,而你不想管事务(太烦),所以,Spring在你访问数据库之前,自动帮你开启事务,当你访问数据库结束之后,自动帮你提交/回滚事务!

如何通俗的理解spring的控制反转、依赖注入、面向切面编程等等的更多相关文章

  1. Spring之控制反转——IoC、面向切面编程——AOP

      控制反转——IoC 提出IoC的目的 为了解决对象之间的耦合度过高的问题,提出了IoC理论,用来实现对象之间的解耦. 什么是IoC IoC是Inversion of Control的缩写,译为控制 ...

  2. Spring框架使用(控制反转,依赖注入,面向切面AOP)

    参见:http://blog.csdn.net/fei641327936/article/details/52015121 Mybatis: 实现IOC的轻量级的一个Bean的容器 Inversion ...

  3. Spring IOC - 控制反转(依赖注入) - 入门案例 - 获取对象的方式 - 别名标签

    1. IOC - 控制反转(依赖注入) 所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交 由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和生命周 ...

  4. Spring IOC - 控制反转(依赖注入) - 单例和多例

    Spring容器管理的bean在默认情况下是单例的,即一个bean只会创建一个对象,存在map中,之后无论获取多少次该bean,都返回同一个对象. Spring默认采用单例方式,减少了对象的创建,从而 ...

  5. Spring IOC - 控制反转(依赖注入) - 配置初始化和销毁的方法

    在Spring中如果某个bean在初始化之后,或销毁之前要做一些额外操作可以为该bean配置初始化和销毁的我方法,在这些方法中完成需要的功能. 实验: 通过断点调试模式,测试初始化方法和销毁方法的执行 ...

  6. Spring IOC - 控制反转(依赖注入) - 懒加载机制

    懒加载机制 Spring默认会在容器初始化的过程中,解析xml,并将单例的bean创建并保存到map中,这样的机制在bean比较少的时间问题不大,但一旦bean非常多时,Spring需要在启动的过程中 ...

  7. Spring IOC - 控制反转(依赖注入) - 创建对象的方式

    a.通过类的无参构造方法创建对象 在入门案例中就是这种方式.当用最普通的方式配饰一个<bean>时,默认就是采用类的 无参构造创建对象.在Spring容器初始化时,通过<bean&g ...

  8. C#使用Autofac实现控制反转IoC和面向切面编程AOP

    Autofac是一个.net下非常优秀,性能非常好的IOC容器(.net下效率最高的容器),加上AOP简直是如虎添翼.Autofac的AOP是通过Castle(也是一个容器)项目的核心部分实现的,名为 ...

  9. 04 Spring:01.Spring框架简介&&02.程序间耦合&&03.Spring的 IOC 和 DI&&08.面向切面编程 AOP&&10.Spring中事务控制

    spring共四天 第一天:spring框架的概述以及spring中基于XML的IOC配置 第二天:spring中基于注解的IOC和ioc的案例 第三天:spring中的aop和基于XML以及注解的A ...

随机推荐

  1. 【一天一道LeetCode】#31. Next Permutation

    一天一道LeetCode系列 (一)题目 Implement next permutation, which rearranges numbers into the lexicographically ...

  2. Java深拷贝浅拷贝

    首先,Java中常用的拷贝操作有三个,operator = .拷贝构造函数 和 clone()方法.由于Java不支持运算符重载,我们无法在自己的自定义类型中定义operator=.拷贝构造函数大家应 ...

  3. 【代码管理】GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流

    GitHub操作总结 : 总结看不明白就看下面的详细讲解. . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details ...

  4. Java-HttpServletRequest

    //继承了ServletRequest接口,给servlet提供Request请求信息,servlet 容器会创建以后HttpServletRequest对象 //并把它作为一个参数给service函 ...

  5. EBS 系统标准职责定义MAP

    ERP的相关职责           Responsibility Name(职责) Application(应用) Responsibility Key(关键字) Data Group(数据组) M ...

  6. window 8.1 + python 3.6 + chrome 59 + selenium 3.4 环境配置

    系统环境 window 8.1 python 3.6 (已经安装了pip) chrome 59.0.3071.115 步骤 安装selenium pip install selenium 下载chro ...

  7. ELF 文件 动态链接 - 地址无关代码(GOT)

    Linux 系统中,ELF动态链接文件被称为 动态共享对象(DSO,Dynamic Shared Object),简称共享对象 文件拓展名为".so" 动态链接下 一个程序可以被分 ...

  8. webpack.config.js配置文件

    1.基本配置 webpack在执行时,除在命令行传入参数,还可以通过指定的配置文件来执行.默认会搜索当前目录下webpack.config.js.这个文件是一个node.js模块,返回一个json格式 ...

  9. jquery左右折叠框

    网站左右折叠框: <!DOCTYPE html> <html> <style> #Kefclose,#Kefopen{position:absolute;left: ...

  10. App 被拒 -- App Store Review Guidelines (2015)中英文对照

    Introduction(简介) We're pleased that you want to invest your talents and time to develop applications ...