Spring的IOC和AOP,学不会Spring的,你看我的文章

  • SpringIOC引入
    • spring容器IOC
    • 总结:IOC/Bean/DI
  • 二、AOP
    • AOP的概念
      • 通俗理解AOP
      • 正式理解AOP:
    • AOP总结:

哈喽大家好,我是自学java的码小胡。我学习路线可能和大家都不太一样,在学习spring家族中,就直接学习了SpringBOOT,AlibabaSpringCloud,以及高速缓冲器Redis,消息队列RabbitMQ。

对没错我跳过了枯燥的Spring知识。今天我回头来学习spring,只要认真学习Spring很多概念都很好理解,比如IOC控制反转、AOP面向切面编程等等概念。来看看我的理解吧:

SpringIOC引入

在讲spring之前,我们可以先弄懂一词 “高耦合” 是什么意思呢?

我自己将高耦合理解为 “牵一发而动全身” 。也就是说只要某个地方发生了改变,连带着很多地方都会发生改变。这就是我理解的高耦合。

那么在代码中是如何体现高耦合呢?那我们看一段非常熟悉的代码:

---数据代码实现:---
public class BookDaoImpl implements BookDao{public void save(){Systemctl.out.println("coding ma xioa hu .....1");}
}---业务层实现:---
public class BookServiceImpl implements BookService{private BookDao bookDao = new BookDaoImpl();public void save(){bookDao.save();}
}

数据层代码发生了变化:

---如果数据层代码发生变化,业务层怎么办呢?----
public class BookDaoImpl2 implements BookDao{public void save(){Systemctl.out.println("coding ma xioa hu...2 ");}
}

数据层代码发生了变化怎么办呢???
那业务层的代码也要跟着动:private BookDao bookDao = new BookDaoImpl2();
那么这就是高耦合
源代码发生了变化,就要重新编译、重新测试。

那么怎样才能降低耦合度呢???
spring的作用出现了:

spring容器IOC

问题:耦合度高
解决方法 :使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象。 从而达到解耦。

IOC控制反转:使用对象时,由主动new产生对象,转换为由外部(IOC)提供对象,此过程中对象的创建控制权由程序转移到外部。这种思想叫做控制反转。

IOC容器:就是用来充当IOC思想中的“外部”。IOC容器负责对象的创建、初始化等一些列工作,

Bean:IOC容器 创建或管理的对象统称为Bean

问题又来了:在程序中,service是需要调用dao。其中两者是有关系的,关系怎么办呢?
DI:依赖注入:在容器中建立Bean与Bean之间的依赖关系的整个过程,称为依赖注入。

总结:IOC/Bean/DI

IOC控制反转:当使用对象时,由主动new产生对象,转换为由外部(IOC)提供对象,此过程中对象的创建控制权由程序转移到外部。这种思想叫做控制反转。
IOC容器: IOC容器负责创建对象
Bean: IOC容器创建的对象,称之为“Bean”
DI: DI来绑定容器中的Bean之间的关系

二、AOP

OOP(Object Oriented Programming)面向对象编程。
OOP作用: 是做类、做对象、继承封装多态。

AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构。
AOP作用:在不惊动原始设计的基础上为其进行功能增强。 这就是spring理念:无侵入式编程。

而不管AOP还是OOP都是一种编程思想。

AOP的概念

通俗理解AOP

先找到程序的共性功能,进行抽取出来,写在通知类
通知类中定义方法叫通知方法
通知方法的作用是: 完成共性功能。

找到需要执行通知方法的方法,定义成切入点 。切入点就是匹配某些通知方法。
连接点是所有方法。
切入点通知方法绑定后得到切面

切面就是: 在哪个切入点上面执行哪些通知

正式理解AOP:

  • 代理(Proxy):SpringAOP的核心本质是采用代理模式实现的。
  • 连接点(JoinPoint):程序执行过程中的任意位置,粒度为(其中可以是:)执行方法、抛出异常、设置变量等。
    • 在SpringAOP中,理解为方法的执行
  • 切入点(Pointcut):匹配连接点的式子
    • 在SpringAOP中,一个切入点可以只描述一个具体方法,也可以匹配多个方法
  • 通知(Advice):在切入点处执行操作,也就是共性功能。
    • 在SpringAOP中,功能最终以方法的形式呈现
  • 通知类: 定义通知的类
  • 切面(Aspect):描述通知切入点的对应关系。也就是说:切面描述的是,执行位置和共性功能的关系。
  • 目标对象(Target) :被代理的原始对象成为目标对象

AOP总结:

AOP全称叫做 Aspect Oriented Programming 面向切面编程。它是为解耦而生的,解耦是程序员编码开发过程中一直追求的境界,AOP在业务类的隔离上,绝对是做到了解耦。

任何一个系统都是由不同的组件组成的,每个组件负责一块特定的功能,当然会存在很多组件是跟业务无关的,例如日志、事务、权限等核心服务组件,这些核心服务组件经常融入到具体的业务逻辑中,如果我们为每一个具体业务逻辑操作都添加这样的代码,很明显代码冗余太多。

因此我们需要将这些公共的代码逻辑抽象出来变成一个切面,然后注入到目标对象(具体业务)中去,AOP正是基于这样的一个思路实现的,通过动态代理的方式,将需要注入切面的对象进行代理,在进行调用的时候,将公共的逻辑直接添加进去,而不需要修改原有业务的逻辑代码,只需要在原来的业务逻辑基础之上做一些增强功能即可。

Spring的IOC和AOP,学不会Spring的,你看我的文章相关推荐

  1. Spring中IOC和AOP的详细解释(转)

    原文链接:Spring中IOC和AOP的详细解释 我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂 ...

  2. Spring:IOC和AOP

    Spring:IOC和AOP 一. IOC (1) 引入 (2) 定义 (3) 作用 (4) 实现 (5) DI依赖注入 二. AOP (1) 概念 (2) Spring中的AOP (3) 入门案例 ...

  3. Java Spring的IoC和AOP的知识点速记

    Spring简介 Spring解决的最核心的问题就是把对象之间的依赖关系转为用配置文件来管理,这个是通过Spring的依赖注入机制实现的. Spring Bean装配 1. IOC的概念以及在Spri ...

  4. Spring的IoC与AOP的理解

    1.Spring它到底是什么? Spring是一个开源的Java应用程序开发框架,为了解决企业应用开发的复杂性而创建的.   在spring中,它会认为一切Java类都是资源,而资源就是Bean,容纳 ...

  5. Spring框架IOC和AOP的实现原理

    IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控.控制权由应用代码中 ...

  6. Spring框架IOC和AOP的实现原理(概念)

    IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控.控制权由应用代码中 ...

  7. 彻底学会Spring的IOC和AOP——理论+实操

    目录 1 IOC 1.1 概念 1.2 底层原理 1.3 IOC容器 1.4 Bean管理:基于xml配置文件实现 1.5 两种类型的Bean 1.6 Bean的作用域 1.7 Bean的生命周期 1 ...

  8. Java 第一大框架:Spring 的 IoC 跟 AOP 雏形如何实现?

    Spring Spring make java more simple: Spring make java more modern: Spring make java more reactive: S ...

  9. Spring框架(IoC、AOP面向接口切面)

    新建一个Maven工程 Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途不仅仅限于服务器端的开发. ...

  10. 【Spring】IoC与AOP

    1. Spring 的优点 Spring 是一个开源的.免费的容器(框架) Spring 是一个轻量级的.非侵入式的框架 控制翻转(IOC),面向切面编程(AOP) 支持事务的处理,对框架整合的支持 ...

最新文章

  1. PCL:PCLPlotter可视化特征直方图
  2. 如何通过动态生成Html灵活实现DataGrid分类统计的界面显示功能
  3. Debian/Ubuntu 报错解决:Command 'ifconfig' not found, but can be installed with
  4. PHP实现http与https转化[转张宴]
  5. 如何将当前更改提交到git中的不同分支[重复]
  6. 华为鸿蒙系统源码_鸿蒙系统 IO 栈分析 | 解读鸿蒙源码
  7. Android Canvas 绘图
  8. app制作流程步骤_企业画册设计流程总结 告诉你画册制作步骤
  9. SQL Server-流程控制 7,Return 语句
  10. Kafka学习(一)-------- Quickstart
  11. java.io.IOException 权限不够
  12. 【Linux】bash: groupadd: command not found a
  13. 2.1.6 用ProtectX实现扫描的反击与追踪
  14. html代码实现全国地图分布,html5 svg浙江地图map省市地区代码
  15. google code 代码托管 用git创建仓库
  16. R语言学习笔记9_多元统计分析介绍
  17. ppt图片去水印-ppt图片去水印怎么设置
  18. 寄给J.Keisler教授的一电子生日贺卡
  19. 【离散数学】 MIT 6.042J 笔记 - Lecture 1 Introductions and Proofs
  20. java环境_linu安装jdk

热门文章

  1. 新安装Visio2013每次打开都提示正在配置,解决办法
  2. VMware 8安装Mac OS X 10.7 Lion
  3. 基于matlab下数字信号的课程设计,基于Matlab的数字信号处理课程设计
  4. Rstudio shiny rmarkdown tidyverse 相关网页
  5. 生成自定义文字的二维码
  6. 按键精灵-自动化脚本
  7. 人的一生该怎样度过?
  8. 解决undefined reference to `WinMain'
  9. 解决win2003里IIS运行ASP时出现请求资源在使用中的问题
  10. js 判断3D空间中 三点共线