spring IOC理解
用spring做了几个项目后发现,对spring的IOC理解还是不够清晰,今天就来总结下自己的理解(个人的一些见解)
以前用jsp+servlet做网站时,只是分了显示层(jsp),控制层(servlet),和数据模型层,很传统的MVC三层架构,各层之间的耦合我
就不说了(感觉就是一锅粥...)。
后来学了spring+hibernate开发网站,有多出来了一个服务层(service),不过一直都是拿它来调用dao层的,并没有感觉它有什么用
(原谅我是一个彩笔...),所谓的业务逻辑也放在了控制层(controller)里完成了 ==!。不过各层之间耦合度明显降低了(哈哈哈,因为用了
spring啊...)。以前用jsp+servlet时,想用哪个层的哪个对象直接new就好了,哪管那么多了。现在不一样了,spring是个好东西啊,IOC和AOP
可以说就是spring的核心功能了,当然,spring的强大可不止这点。今天我要总结的是spring的IOC容器管理bean。service层要调用dao层,Controller
层要调用service层,这层与层之间的调用可不是直接new出来就好了,首先你要面向接口开发,面向接口开发配合spring的IOC可以显著降低各层之间的
耦合度,就拿Controller层调用service层来说吧,在controller层调用需要使用的service接口,构造方法或set方法注入,具体调用哪个service实现类这
个就不归controller管了,spring负责为这个controller注入具体调用的实现类,默认情况下spring管理的bean是单例的,在IOC容器内只会创建一个bean
对象,各个controller层调用的当然也就是这一个bean对象了,不过这个看需求,可以配置为多例。这样controller控制层就不会与service服务层产生过多
耦合,因为controller要用到的具体service对象是由spring创建的,spring管理了注入依赖关系的过程,而controller调用的只是service接口,这样他们之
间的耦合是不是降到了最低。
上面一直在说“耦合”,那到底什么是所谓的耦合呢。我所理解的耦合就是层与层之间的关系过于紧密,例如controller层想要调用一个service层的具体对象,
可以在controller层直接new不就得了,然后controller层还需要service层的另一个具体对象,那它再new一个,反正想要用哪个就new哪个,也很方便,功能
一样可以实现,还不需要定义那么多接口,管理那么多的实现关系。当然,这在开发小项目在开发过程中是没问题的,但是,小项目后期也是要维护的啊,你一个
controller层new了那么多service层的具体实现类,怎么想要扩展功能,修改需求,那改动可不是一般的大啊,修改bug也很烦有木有,就像打地鼠一样,这个bug
改完又会出现别的bug,真的很烦啊。这就是耦合过高的缘故。
spring IOC理解的更多相关文章
- spring ioc 理解
springIOC 作用 springIOC 是sprig的特性.称作控制反转.将对象的创建,初始化,销毁,交给spring容器管理. 原理 在spring容器启动的时候,通过反射的方式,主动加载(或 ...
- 学习AOP之透过Spring的Ioc理解Advisor
花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...
- 谈谈对Spring IOC的理解(转)
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- 谈谈对Spring IOC的理解
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- 轻松理解spring IOC
spring IOC(Inversion of control)即控制反转 概念:一,spring框架的核心之一 二,控制权由对象本身转向容器:由容器根据配置文件去创建实例并创建各个实例之间的依赖关系 ...
- Spring系列之谈谈对Spring IOC的理解
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IOC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- 谈谈对Spring IOC的理解【转】
学习过Spring框架的人 一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大 ...
- spring ioc DI 理解
下面是我从网上找来的一些大牛对spring ioc和DI的理解,希望也能让你对Spring ioc和DI的设计思想有更进一步的认识. 一.分享Iteye的开涛对Ioc的精彩讲解 Ioc—Inversi ...
- Spring IOC的理解
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理 ...
随机推荐
- Vue.directive基础,在Vue模块开发中使用
这是从网上找到的一个案例,由于网上的案例有坑,所以我在这里从新上传一次! 首先在main.js里引入两个自定义指令 import {focus, drag} from './components/da ...
- 7个鲜为人知却超实用的PHP函数--转(柒捌玖零)
PHP有许多内置函数,其中大多数函数都被程序员广泛使用.但也有一些函数隐藏在角落,本文将向大家介绍7个鲜为人知,但用处非常大的函数. 没用过的程序员不妨过来看看. 1.highlight_string ...
- 多分类评价指标python代码
from sklearn.metrics import precision_score,recall_score print (precision_score(y_true, y_scores,ave ...
- vueJs的简单入门以及基础语法
1-1基本数据绑定 <div id="app"> {{ msg }} </div> //script new Vue({ el:"#app&quo ...
- mysql mybatis useGeneratedKeys Field 'ID' doesn't have a default value的问题
原因是:创建表时没有让id自动增长: CREATE TABLE `STORAGE_VIRTUAL` ( `ID` ) NOT NULL AUTO_INCREMENT, `STORAGE_ID` ) N ...
- VIP之Clipper
裁剪器II提供方法从视频流中选择有效区域并丢弃剩余部分. 指定有效区域的方式是从到边界的偏移量,或者给出有效区左上角的像素坐标和有效区的宽及高度. 裁剪器IP核通过读取Avalon-ST视频流中的控制 ...
- Nios II——定制自己的IP1之Nios接口类型
信号自动识别的接口前缀 接口前缀 接口类型 asi Avalon-ST宿端口(输入) aso Avalon-ST源端口(输出) avm Avalon-MM主端口 avs Avalon-MM从端口 ax ...
- Effective C++ 随笔(2)
条款5 了解c++默默编写并调用哪些函数 编译器自动生成的copy 构造函数,copy赋值操作符,析构函数,构造函数,这些都是public和inline的,此处inline的意思是他们的定义都是在头文 ...
- Jquery获取选中的文本值
$(document).ready(function() { $(".contenttext").mouseup(function(e) { var txt; var parent ...
- C#版ObjectId
近来在准备弄一个开源的HIS,但一周过去了几乎没有进度.就卡在ID如何生成.HIS的数据库压力大,如何多数据库支持,减轻压力一直想去实现.拿不准纯数字ID段还是GUID一类的文本ID.最终在mongo ...