博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何通俗的理解spring的控制反转、依赖注入、面向切面编程等等
阅读量:6855 次
发布时间:2019-06-26

本文共 1506 字,大约阅读时间需要 5 分钟。

之前一直不理解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在你访问数据库之前,自动帮你开启事务,当你访问数据库结束之后,自动帮你提交/回滚事务!

转载地址:http://uayyl.baihongyu.com/

你可能感兴趣的文章
《NX-OS与Cisco Nexus交换技术:下一代数据中心架构(第2版)》一2.3 PVLAN
查看>>
6月23日云栖精选夜读:重磅!阿里妈妈首次公开自研CTR预估核心算法MLR
查看>>
《Hadoop大数据分析与挖掘实战》——1.4节数据挖掘建模过程
查看>>
重拾开始菜单的 Windows 9
查看>>
2016 最常见密码排行榜出炉 “123456”稳稳上榜
查看>>
《OpenStack云计算实战手册(第2版)》一1.9 配置服务的租户和服务的用户
查看>>
Python控制多进程与多线程并发数
查看>>
《容器技术系列》一2.3 Docker命令执行
查看>>
《HTML5游戏编程核心技术与实战》一2.4 坐标变换
查看>>
《互联网产品设计》一2.5 写代码,让产品可以使用
查看>>
大数据的真正价值在哪里?
查看>>
最新版AlphaGo(Master)的60胜预示着人类将是一种过时的算法?
查看>>
美使馆9年pm2.5数据分析:雾霾到底是不是加重了?
查看>>
《嵌入式Linux开发实用教程》——4.3 块设备驱动
查看>>
《Maven官方文档》POM文件(二)
查看>>
Apache Storm 官方文档 —— 配置开发环境
查看>>
企业IT架构转型之道:阿里巴巴中台战略思想与架构实战. 2.5 为真正发挥大数据威力做好储备...
查看>>
如何通过 MySQL 的二进制日志恢复数据库数据
查看>>
【科普】数字货币的基石--区块链
查看>>
深入实践Spring Boot1.2.1 使用Maven新建项目
查看>>