Spring 基础概念——DI、IOC(一)
一、IOC 控制反转
package com.qunar.studyspring.bean; import com.qunar.studyspring.dao.PersonDao;
import com.qunar.studyspring.object.Person; /**
* 这是一个没有控制反转的例子
* @author liqiu
*
*/
public class PersonServiceBean {
private PersonDao personDao = new PersonDao(); public void save(Person person) {
personDao.save(person);
}
}
在解释什么是控制反转之前,先介绍没有出现这个技术之前的例子。如上面所示,PersonDao是直接引用的,也就是说我要在哪里使用PersonDao,就要在哪里初始化它,像是废话是吧,没关系,再看下面的控制反转的例子:
package com.qunar.studyspring.bean; import com.qunar.studyspring.dao.PersonDao;
import com.qunar.studyspring.object.Person; /**
* 这是一个没有控制反转的例子
* @author liqiu
*
*/
public class PersonServiceBean {
private PersonDao personDao; //咱们在构造方法内(也可以采用set方法),将对象注入到应用里面,也就是应用里面的personDao是由外部容器负责创建的
public PersonServiceBean(PersonDao personDao){
this.personDao = personDao;
} public void save(Person person) {
personDao.save(person);
}
}
区别就是在PersonServiceBean中,什么时候创建personDao,自己不知道,有外面调用它的程序控制。也就是说所谓控制反转就是把依赖对象交给外部容易负责创建。
二、DI 依赖注入
所谓依赖注入就是:在运行期间,由外部容器动态将依赖对象注入到组件中。
那么依赖注入和控制反转有啥区别哪?引用网络上面的一段话:“依赖注入和控制反转是对同一件事情的不同描述,只是它们描述的角度不同。依赖注入是从应用程序的角度在描述,即:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,既:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。”
三、使用Spring的好处:
1、解耦:Control、Service和Dao相互不在直接声明使用
2、事物管理服务、JMS服务、持久化等等
3、支持单例模式
4、支持AOP技术,面向切面开发
5、有很多的辅助类:JdbcTemplate、HibernateTemplate
6、支持主流框架的集成:Hibernate、Struts等
四、轻量级框架和重量级框架的区别
主要区别是:启用服务的多少。
Spring是否是重量级框架?如果仅仅使用Spring的默认服务,那么就是轻量级框架,如果其他的服务都打开使用的话就是重量级框架。
Spring 基础概念——DI、IOC(一)的更多相关文章
- Spring基础篇——DI/IOC和AOP原理初识
DI(Dependency Injection),依赖注入,和我们常听说的另一个概念 IOC(控制反转)其实归根结底实现的功能是相同的,只是同样的功能站在不同的角度来阐述罢了.这里博主就不去过多的辨析 ...
- Spring专题2: DI,IOC 控制反转和依赖注入
合集目录 Spring专题2: DI,IOC 控制反转和依赖注入 https://docs.spring.io/spring/docs/2.5.x/reference/aop.html https:/ ...
- 对于Spring中AOP,DI,IoC概念的理解
IOC IoC(inversion of Control),控制反转.就好像敏捷开发和SCRUM一样,不是什么技术,而是一种方法论,一种工程化的思想.使用IoC的思想意味着你将设计好的对象交给容器控制 ...
- Spring学习笔记(二)Spring基础AOP、IOC
Spring AOP 1. 代理模式 1.1. 静态代理 程序中经常需要为某些动作或事件作下记录,以便在事后检测或作为排错的依据,先看一个简单的例子: import java.util.logging ...
- Spring基础篇——DI和AOP初识
前言 作为从事java开发的码农,Spring的重要性不言而喻,你可能每天都在和Spring框架打交道.Spring恰如其名的,给java应用程序的开发带了春天般的舒爽感觉.Spring,可以说是任何 ...
- spring基础概念AOP与动态代理理解
一.代理模式 代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一 ...
- 【spring揭秘】1、关于IOC的基础概念
1.基础概念 IOC有三种注入方式: 1.构造方法注入,就是通过构造方法进行实例化成员属性对象,优点是实现对象之后直接就可以使用,但是参数过多也是个麻烦 2.setter方法注入,实现相应的sette ...
- Spring基础03——Spring IOC和DI概述
1.什么是IOC与DI IOC(Inversion of Control):其思想是反转资源获取方向,传统的资源查找方式要求组件想容器发起请求查找资源,作为回应,容器适时的返回资源,而应用了IOC之后 ...
- Spring MVC -- Spring框架入门(IoC和DI)
Spring MVC是Spring框架中用于Web应用开发的一个模块.Spring MVC的MVC是Model-View-Controller的缩写.它是一个广泛应用于图像化用户交互开发中的设计模式, ...
随机推荐
- C#编程(三十六)----------元组
元组 数组合并了相同类型的对象,而元组合并了不同类型的对象. .NET 4定义了8个泛型Tuple类和一个静态的Tuple类,他们用作元组的工厂. 元组是一种数据结构,通过逗号分隔 Tuple< ...
- Informix 常用函数
一.内部函数 1.内部合计函数 1)COUNT(*) 返回行数 2)COUNT(DISTINCT COLNAME) 返回指定列中唯一值的个数 3)SUM(COLNAME/EXPRESSION) 返回指 ...
- 疑犯追踪第五季/全集Person of Interest迅雷下载
英文全名Person of Interest,第5季(2015)CBS.本季看点:<疑犯追踪>本季剧组暗示Finch可能重建机器,这次他会给机器更多自由(如Root一直要求的那样).或许新 ...
- 用level-list让同一个ImageView根据条件来显示不同的内容
感谢:http://blog.sina.com.cn/s/blog_6111ce890100psq9.html 有时候,我们为了在一个ImageView中显示不同的图片,平时往往会使用: if (条件 ...
- LRU和LFU的区别
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/guoweimelon/article/details/50855351 一.概念介绍 LRU和LFU ...
- User guide for Netty 4.x
Table of Contents Preface The Solution Getting Started Before Getting Started Writing a Discard Serv ...
- 修改visual studio2010 的快捷键,使用ctrl+W 关闭当前文档
废话不多说,打开visualstudio 的菜单 [工具]->[选项].定位到 环境->键盘. 找到光口.关闭文档窗口.把默认的ctrl+F4移除,因为这两个组合键按起来太麻烦,太累了.再 ...
- 正向代理与反向代理区别图解 (nginx)
1. 背景 经常听到代理,比如通常我们要上国外的网站时,需要买vpn作为跳板机器进行访问. 但是在公司里面也听到了nginx支持反向代理. 那什么是正向代理,什么是反向代理?在网上看了写内容,说一下自 ...
- 如何使用chrome自带的Javascript调试工具 【转】
http://zhangyongbluesky.blog.163.com/blog/static/1831941620113155739840/ 将写好的Javascript代码用chrome打开. ...
- iOS开发-ViewController的生命周期和切换
ViewController在App开发中是至关重要的一环,无论是页面的展示和数据之间的交互,ViewController提供了一个框架可以管理和构建App应用.iOS中构建App提供了两种方式一种是 ...