spring框架的两大核心理念就是IOC和AOP,在面试的时候经常会被问到你对spring的理解。下面大致的说一下我对spring的理解。

一、IoC

1.1、什么是IoC

  众所周知,IoC就是控制反转,那么什么是控制反转?

  首先大家要考虑几个问题。

  • 谁控制?控制了什么?

    传统的java程序设计,当A需要B的时候,我们会在A中new一个B,这就是程序主动创建以来对象;而spring专门提供了IOC容器来创建这些对象。

    谁控制?IoC 容器控制;控制了什么?就是IOC容器控制着对象或者说是外部的资源。

  • 反转了什么?哪里反转了?

    有反转就说明有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象。

    反转了什么?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪里反转了?依赖对象的获取被反转了。

1.2、IoC是做什么的

  传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

  其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。

1.3、IoC(控制反转)和DI(依赖注入)

  DI—Dependency Injection,即“依赖注入”组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

  理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那我们来深入分析一下:

  ●谁依赖于谁:当然是应用程序依赖于IoC容器

  ●为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源

  ●谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象

  ●注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)

  IoC和DI由什么关系呢?其实它们是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。

  依赖注入的三种方式:setter、构造方法、注解(@Autowired,@Resource)。

1.4、总结

  在传统的java程序设计中,A需要B,我们就要在A中new一个B,这样大大提高了代码的耦合度,而spring会把资源存储到IoC容器中,当A依赖B的时候,IoC就会把B注入到A中。这样就完成了资源的控制的反转。

  所以控制反转IoC(Inversion of Control)是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方,比如转移交给了IoC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了 IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。

 二、AOP

对spring框架的理解的更多相关文章

  1. 【转】Spring框架深入理解

    参考这篇文章: http://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/ Spring内部分为Beans, Context 和 ...

  2. 对Spring框架的理解(转)

    ①  spring框架是一个开源而轻量级的框架,是一个IOC和AOP容器 ② spring的核心就是控制反转(IOC)和面向切面编程(AOP) ③  控制反转(IOC):是面向对象编程中的一种设计原则 ...

  3. 面试:谈谈你对Spring框架的理解

    Spring是一个优秀的轻量级框架,大大的提高了项目的开发管理与维护.Spring有两个核心模块.一个是IOC,一个是AOP. IOC: 就是控制反转的意思,指的是我们将对象的控制权从应用代码本身转移 ...

  4. Spring框架的理解

    Spring 是一個开源的IOC和AOP容器框架! 具体描述为: 1.轻量级:Spring是非侵入性-基于Spring开发的应用中的对象可以不依赖API开发 2.依赖注入(DI---------dep ...

  5. Java面试之五大框架的理解

    五大框架(springMVC,struts2,spring,mybatis,hibernate) 说说你对springMVC框架的理解? 简要口述(如果感觉说的少可以在完整答案里面挑几条说) Spri ...

  6. 【Java】关于Spring框架的总结 (一)

    本文总结一些关于Spring框架的理解,注意点及基础操作.如果有不对的地方,欢迎批评和建议.大家一起努力吧! Spring 框架简介 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创 ...

  7. Spring框架之控制反转和依赖注入

    学Spring框架必须理解控制反转和依赖注入.下面各自举一个例子,来说明控制反转和依赖注入. IOC(控制反转):应用本身创建和维护的依赖对象:现在交由外部容器(Spring)来创建和维护:这个控制权 ...

  8. Spring框架IOC,DI概念理解

    1.什么是框架? 框架是一种重复使用的解决方案,针对某个软件开发的问题提出的. Spring框架,它是一个大型的包含很多重复使用的某个领域的解决方案. Spring的理念:不要重复发明轮子. 2.Sp ...

  9. mybatis中两种取值方式?谈谈Spring框架理解?

    1.mybatis中两种取值方式? 回答:Mybatis中取值方式有几种?各自区别是什么? Mybatis取值方式就是说在Mapper文件中获取service传过来的值的方法,总共有两种方式,通过 $ ...

随机推荐

  1. C++之 类型定义语句--typedef

    typedef的作用是给一个已经存在的数据类型起个别名. 使用的语法形式是:typedef   已有类型名  新类型名表;. 新类型名表中可以有多个标识符,它们之间用逗号分开,就是在一个typedef ...

  2. 如何使用ESP8266、ESP8285做一个WiFi中继(WiFi信号放大器)

    准备工作 准备一个深圳四博智联科技有限公司的ESP-F 模组.或者四博智联科技的NODEMCU 当我们拿到ESP-F模块后,可以按照以下接线进行测试: 即 VCC.EN 接 3.3v.GPIO15 G ...

  3. jenkins问题整理

    --------------------------------这是一个模板------------------------------------- 问题1:jenkins服务器上传jar包到指定服 ...

  4. 1.4 SQL函数

    1.调用聚合函数 sum:返回所有值的和/非重复数据的和 avg:平均数且忽略空值 min:最小值 max:最大值 count:计数函数 distinct:去不重复记录 2.数学函数 abs:绝对值 ...

  5. Tomcat基本配置

    第二十六课 Tomcat基本配置 目录 一. Tomcat介绍 二. 安装jdk 三. 安装Tomcat 四. 配置Tomcat监听80端口 五. 配置Tomcat虚拟主机 六. Tomcat日志 七 ...

  6. Jest 学习笔记(一)之matchers

    Jest官网地址 Jest是专门被facebook用于测试包括React应用在内的所有javascript代码,Jest旨在提供一个综合的零计算的测试体验. 因为没有找到文档,基于我个人的经验,Jes ...

  7. ionic3 对android包进行签名

    在已经生成签名文件的前提下 对android包进行签名 如果还未生成签名文件 请参考链接 https://jingyan.baidu.com/article/642c9d34eaeeda644a46f ...

  8. Lavarel Route::resource

    RESTful Resource controller A RESTful resource controller sets up some default routes for you and ev ...

  9. [Paper][Link note]

    http://ieeexplore.ieee.org/document/6974670/

  10. Oracle启动和关闭数据库

    本机只安装一个数据库的情况下sqlplus / as sysdba启动数据库startup关闭数据库shutdown immediate