Spring框架-SpringIOC、AOP基础

1.SpringIOC

SpringIOC控制反转是将创建对象的权力交给外部环境,比如Spring框架、IOC容器,将对象之间的相互依赖关系交给IOC容器来管理,由IOC容器完成对象的注入,降低了耦合度,当需要创建一个对象的时候,只需要配置好文件/注解就可以了。
IOC容器就是Spring用来实现IOC的载体,本质是一个Map,Map中存放了各种对象,可以使用XML文件、注解方式配置Bean。

2.Spring DI

依赖注入,Spring框架创建Bean对象时,动态的将依赖对象注入到Bean组件中,实现依赖对象的注入。

3.Spring AOP

AOP(Aspect-Oriented Programming)是一种程序设计类型,它通过分离横切关注点来增加程序的模块化。AOP 在不修改现有代码的情况下对现有代码添加功能,这个是 AOP 最重要的能力。
Spring AOP(Aspect Oriented Programming,面向切面编程)是OOPs(面向对象编程)的补充,它提供了模块化。在面向对象编程中,关键的单元是对象,AOP的关键单元式切面,或者说关注点。一些切面可能有集中的代码,但是有些可能被分散或者混杂在一起,例如日志或者事务。这些分散的切面被称为横切关注点。一个横切关注点是一个可以影响到整个应用的关注点,而且应该被尽量地集中到代码的一个地方,例如事务管理、权限、日志、安全等。AOP让你可以使用简单可插拔的配置,在实际逻辑执行之前、之后或周围动态添加横切关注点。这让代码在当下和将来都变得易于维护。

4.在Spring AOP中关注点和横切关注点有什么不同?

关注点是我们想在应用的模块中实现的解决特定业务的方法。关注点可以被定义为:我们想实现以解决特定业务问题的方法。比如,在所有电子商务应用中,不同的关注点(或者模块)可能是库存管理、航运管理、用户管理等。
横切关注点:贯穿整个应用程序的关注点。像日志、安全和数据转换,它们在应用的每一个模块都是必须的,所以他们是一种横切关注点。

5.Spring的通知类型

在这里插入图片描述

前置通知(Before Advice): 在连接点之前执行的Advice,不过除非它抛出异常,否则没有能力中断执行流。使用 @Before 注解使用这个Advice。
返回之后通知(After Retuning Advice): 在连接点正常结束之后执行的Advice。例如,如果一个方法没有抛出异常正常返回。通过 @AfterReturning 关注使用它。
抛出(异常)后执行通知(After Throwing Advice): 如果一个方法通过抛出异常来退出的话,这个Advice就会被执行。通用 @AfterThrowing 注解来使用。
后置通知(After Advice): 无论连接点是通过什么方式退出的(正常返回或者抛出异常)都会执行在结束后执行这些Advice。通过 @After 注解使用。
围绕通知(Around Advice): 围绕连接点执行的Advice,就你一个方法调用。这是最强大的Advice。通过 @Around 注解使用。

6.Spring AOP之通知、连接点、切点、切面

https://blog.youkuaiyun.com/github_34889651/article/details/51321499

1.知识背景

软件系统可以看成是由一组关注点组成的,其中,直接的业务关注点,是直切关注点。而为直切关注点提供服务的,就是横切关注点。

2.面向切面编程的基本原理
什么是面向切面编程

横切关注点:影响应用多处的功能(安全、事务、日志)

切面:

横切关注点被模块化为特殊的类,这些类称为切面

优点:

每个关注点现在都集中于一处,而不是分散到多处代码中
服务模块更简洁,服务模块只需关注核心代码。

3.AOP术语
(1)通知:

  • 定义:切面也需要完成工作。在 AOP 术语中,切面的工作被称为通知。
  • 工作内容:通知定义了切面是什么以及何时使用。除了描述切面要完成的工作,通知还解决何时执行这个工作。
  • Spring 切面可应用的 5 种通知类型:

1.Before——在方法调用之前调用通知
2.After——在方法完成之后调用通知,无论方法执行成功与否
3.After-returning——在方法执行成功之后调用通知
4.After-throwing——在方法抛出异常后进行通知
5.Around——通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为

(2)连接点:

  • 定义:连接点是一个应用执行过程中能够插入一个切面的点。
  • 连接点可以是调用方法时、抛出异常时、甚至修改字段时、
  • 切面代码可以利用这些点插入到应用的正规流程中
  • 程序执行过程中能够应用通知的所有点。
    (3)切点:
  • 定义:如果通知定义了“什么”和“何时”。那么切点就定义了“何处”。切点会匹配通知所要织入的一个或者多个连接点。
  • 通常使用明确的类或者方法来指定这些切点。
  • 作用:定义通知被应用的位置(在哪些连接点)
    (4)切面:
  • 定义:切面是通知和切点的集合,通知和切点共同定义了切面的全部功能——它是什么,在何时何处完成其功能。
    (5)引入:
  • 引入允许我们向现有的类中添加方法或属性
    (6)织入:
  • 织入是将切面应用到目标对象来创建的代理对象过程。
  • 切面在指定的连接点被织入到目标对象中,在目标对象的生命周期中有多个点可以织入

编译期——切面在目标类编译时期被织入,这种方式需要特殊编译器。AspectJ的织入编译器就是以这种方式织入切面。 类加载期——切面在类加载到
JVM ,这种方式需要特殊的类加载器,他可以在目标类被引入应用之前增强该目标类的字节码。AspectJ5 的 LTW 就支持这种织入方式
运行期——切面在应用运行期间的某个时刻被织入。一般情况下,在织入切面时候,AOP 容器会为目标对象动态的创建代理对象。Spring AOP就是以这种方式织入切面。

3:Spring 对 AOP 的支持4:使用切点选择连接点5:在 XML 中声明切面
https://blog.youkuaiyun.com/github_34889651/article/details/51321499

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值