Spring核心思想Ioc和Aop (面试)

注意: Ioc和Aop并不是Spring提出的,在Spring之前就已经存在,Spring只是在技术层面给这两个思想做了非常好的实现。

1 Ioc

1.1 下面谈谈你是怎么理解ioc的吧。

面试官: 下面谈谈你是怎么理解ioc的吧。

我:Inversion of Control (控制反转)。它只是一个技术思想,不是一个技术实现

我:在传统的java开发中,bean的创建,管理一直是一个让人头疼的问题。

我:比如类A依赖于类B,通常会在类A中new一个B的对象。

我:在Ioc思想下,我们可以不用自己去new对象,而是由Ioc容器去帮助我们实例化对象并且管理它。我们需要使用某个对象,去Ioc容器中要即可。


1.2 为什么称Ioc叫做控制反转?

面试官: 为什么称Ioc叫做控制反转?

我:控制:指得是对象的创建。(实例化,管理)的权利。

我:反转:控制权而又交给外部环境了(spring框架、IoC容器)

1.3 Ioc解决了什么问题?

面试官: Ioc解决了什么问题?

我:IoC解决了对象之间的耦合问题

我:比如我们在使用Dao对象的时候,有多个service需要用到Dao对象,那么我们硬编码在每个service中new多个Dao对象

1.41.3 IoC和DI的区别?

DI:Dependancy Injection(依赖注⼊)

面试官: IoC和DI的区别

我:我觉得 IOC和DI描述的是同⼀件事情,只不过⻆度不⼀样罢了

2 Aop

2.1 什么是AOP?

AOP: Aspect oriented Programming ⾯向切⾯编程/⾯向⽅⾯编程

面试官: 什么是AOP?

我:要说Aop,得先从OOP说起,OOP三大特征:封装,继承,多态。oop是⼀种垂直继承体系。

我:OOP编程思想可以解决⼤多数的代码重复问题,但是有⼀些情况是处理不了的,⽐如下⾯的在顶级⽗类 Animal中的多个⽅法中相同位置出现了重复代码,OOP就解决不了。

比如需要对接口的性能监控,OOP的思想,需要在每处需要监控的地方编写重复代码。

  • 横切逻辑 (简单来说,就是在业务代码之前,或者之前,或者环绕他们执行)

横切逻辑代码

横切逻辑代码存在什么问题: 横切代码重复问题 横切逻辑代码和业务代码混杂在⼀起,代码臃肿,维护不⽅便 AOP出场,AOP独辟蹊径提出横向抽取机制,将横切逻辑代码和业务逻辑代码分析

我:而利用Aop的思想可以完美的规避这些问题。

2.2 为什么叫做⾯向切⾯编程

「切」:指的是横切逻辑,原有业务逻辑代码我们不能动,只能操作横切逻辑代码,所以⾯向横切逻辑。()

「⾯」:横切逻辑代码往往要影响的是很多个⽅法,每⼀个⽅法都如同⼀个点,多个点构成⾯,有⼀个⾯的概念在⾥⾯

Spring核心思想Ioc和Aop (面试)的更多相关文章

  1. Spring核心思想——IOC和DI

    基本概念 IOC是什么?     IOC(Inversion of Control)控制反转,IOC是一种新的Java编程模式,目前很多轻量级容器都在广泛使用的模式. IOC解决了什么问题?      ...

  2. 详谈 Spring 中的 IOC 和 AOP

    这篇文章主要讲 Spring 中的几个点,Spring 中的 IOC,AOP,下一篇说说 Spring 中的事务操作,注解和 XML 配置. Spring 简介 Spring 是一个开源的轻量级的企业 ...

  3. Spring核心思想:“控制反转”,也叫“依赖注入” 的理解

    @Service对应的是业务层Bean,例如: @Service("userService") public class UserServiceImpl implements Us ...

  4. Spring核心思想:IOC(控制反转)、DI(依赖注入)和AOP(面向切面编程)

    Spring有三大核心思想,分别是控制反转(IOC,Inversion Of Controller),依赖注入(DI,Dependency Injection)和面向切面编程(AOP,Aspect O ...

  5. spring核心思想:IOC(控制反转)和DI(依赖注入)

    Spring有三大核心思想,分别是控制反转(IOC,Inversion Of Controller),依赖注入(DI,Dependency Injection)和面向切面编程(AOP,Aspect O ...

  6. Spring 框架基础(03):核心思想 IOC 说明,案例演示

    本文源码:GitHub·点这里 || GitEE·点这里 一.IOC控制反转 1.IOC容器思想 Java系统中对象耦合关系十分复杂,系统的各模块之间依赖,微服务模块之间的相互调用请求,都是这个道理. ...

  7. Spring(1) --入门(IoC,AOP)

    说说你对spring的理解? Spring框架是一个轻量级的企业级开发的一站式解决方案,所谓一站式解决方案就是可以基于Spring解决Java EE开发的所有问题.Spring框架主要提供了IoC容器 ...

  8. Spring框架之IoC和AOP

    Spring框架简介: 2003年2月,Spring框架正式成为一个开源项目,并发布于SourceForge中.致力于Java EE应用的各种解决方案,而并不是仅仅专注于某一层的方案,是企业应用开发的 ...

  9. Spring学习笔记IOC与AOP实例

    Spring框架核心由两部分组成: 第一部分是反向控制(IOC),也叫依赖注入(DI); 控制反转(依赖注入)的主要内容是指:只描述程序中对象的被创建方式但不显示的创建对象.在以XML语言描述的配置文 ...

随机推荐

  1. Spring Boot整合Swagger报错:"this.condition" is null

    前段时间看到群里有吐槽swagger整合问题,当时没仔细看,总以为是姿势不对. 这两天正好自己升级Spring Boot版本,然后突然出现了这样的一个错误: Caused by: java.lang. ...

  2. 原理:C++为什么一般把模板实现放入头文件

    写在前面 本文通过实例分析与讲解,解释了为什么C++一般将模板实现放在头文件中.这主要与C/C++的编译机制以及C++模板的实现原理相关,详情见正文.同时,本文给出了不将模板实现放在头文件中的解决方案 ...

  3. ARM学习1

    ARM相关概念 1.ARM的发展史 1. 1978年,CPU公司 Cambridge processing Unit 2. 1979年 Acorn 3. 1985年, 32位,8MHz, 使用的精简指 ...

  4. vue运行npm run dev时候,自动打开页面

    在config/index.js找到dev:{}里面的autoOpenBrowser: 设置为true,重新npm run dev一次就自动弹出浏览器页面啦!

  5. 轻松解决pycharm中游标变宽的问题

    所谓的知者易,惑者难,一招回到解放前,遇到下面这种问题的解决方法: 轻轻动动你那可爱的手指头点击一下 insert插入键便可以轻松切换到你想要的游标了,不要感谢哥,哥也只是个过客

  6. Groovy基础语法

    Groovy 基础语法 变量定义 1.支持动态类型,使用def关键字定义变量 // Java中定义变量的方式 int age = 18; String name = "张三"; / ...

  7. 2.shell脚本99乘法表

    shell脚本99乘法表 [root@localhost data]# vim cf.sh

  8. SAP APO-供应网络计划

    供应网络计划整合了供应链中的所有流程-采购,制造和分销. 供应网络计划可以优化采购和生产,缩短订单完成时间,并改善客户服务. 供应网络计划与高级计划和优化的其他过程紧密集成,以开发用于购买,制造和分配 ...

  9. Spring Data JPA系列3:JPA项目中核心场景与进阶用法介绍

    大家好,又见面了. 到这里呢,已经是本SpringData JPA系列文档的第三篇了,先来回顾下前面两篇: 在第1篇<Spring Data JPA系列1:JDBC.ORM.JPA.Spring ...

  10. React中setState方法说明

    setState跟新数据是同步还是异步? setState跟新数据是异步的. 如何用代码表现出来是异步的. 点击按钮更新数据,然后去打印这个值看一下 setState跟新数据是异步的 class Fa ...