首页 > 其他分享 >1.3Spring对AOP的支持

1.3Spring对AOP的支持

时间:2023-10-05 16:32:57浏览次数:32  
标签:调用 连接点 Spring 1.3 代理 切面 AOP

  并不是所有的AOP框架都是相同的,它们在连接点模型上可能有强弱 之分。有些允许在字段修饰符级别应用通知,而另一些只支持与方法 调用相关的连接点。它们织入切面的方式和时机也有所不同。但是无 论如何,创建切点来定义切面所织入的连接点是AOP框架的基本功 能。

   因为这是一本介绍Spring的图书,所以我们会关注Spring AOP 。虽然 如此,Spring和AspectJ项目之间有大量的协作,而且Spring对AOP的支持在很多方面借鉴了AspectJ项目。

Spring提供了4种类型的AOP支持:

1.3Spring对AOP的支持_代理类

前三种都是Spring AOP实现的变体,Spring AOP构建在动态代理基础 之上,因此,Spring对AOP的支持局限于方法拦截。

1.为什么放弃Spring经典Aop模型?

Spring经典的AOP看起来就显得非常笨重和过于复杂,直接使用 ProxyFactory Bean会让人感觉厌烦。但是现在Spring提供了更简洁和干净 的面向切面编程方式。

2.如何将纯POJO转哈为切面?

引入了简单的声明式AOP和基于注解的AOP之 后, 借助Spring的aop命名空间,我们可以将纯POJO转换为切面。

3.这种方式有什么缺点?

实际 上,这些POJO只是提供了满足切点条件时所要调用的方法。遗憾的是,这种技术需要XML配置,但这的确是声明式地将对象转换为切面的简便方式。

4.Spring借鉴Aspect切面是为了什么?

Spring借鉴了AspectJ的切面,以提供注解驱动的AOP 。

5.本质上是为了什么?

本质上,它依 然是Spring基于代理的AOP ,但是编程模型几乎与编写成熟的AspectJ 注解切面完全一致。

6.Aop风格的好处?

这种AOP风格的好处在于能够不使用XML来完成 功能。

7.AOP需求超过简单的方法调用?

如果你的AOP需求超过了简单的方法调用 (如构造器或属性拦截) , 那么你需要考虑使用AspectJ来实现切面。在这种情况下,上文所示的第四种类型能够帮助你将值注入到AspectJ驱动的切面中。

Spring AOP框架的一些关键知识。

1.3Spring对AOP的支持_代理类_02

Spring通知是Java编写的

1.3Spring对AOP的支持_代理类_03

Spring在运行时通知对象

通过在代理类中包裹切面,Spring在运行期把切面织入到Spring管理 的bean中。

下述图表明了什么?

1.代理类封装了目标类。
2.拦截被通知方法的调用。
3.把调用转发给真正的目标bean。  
4.当代理拦截到方法调用时, 在调用目标bean方法之前,会执行切面逻辑。

1.3Spring对AOP的支持_AOP_04

1.3Spring对AOP的支持_代理类_05

图4 .3 Spring的切面由包裹了目标对象的代理类实现。

1.Spring时如何创建代理对象?

代理类处理方法的调用,执行额外的切面逻辑,并调用目标方法直到应用需要被代理的bean时,Spring才创建代理对象。

2.如果使用的 是ApplicationContext的话,何时创建被代理的对象?

在ApplicationContext从BeanFactory中加载所有bean的时候,Spring才会创建被代理的对 象。

3.这样做有什么好处?

因为Spring运行时才创建代理对象,所以我们不需要特殊的编译 器来织入Spring AOP的切面。

Spring只支持方法级别的连接点

使用各种AOP方案可以支持多种连接点模 型。

1.Spring支持方法连接点

因为Spring基于动态代理,所以Spring只支持方法连接点。这与 一些其他的AOP框架是不同的,例如AspectJ和JBoss ,除了方法切点,它们还提供了字段和构造器接入点。

2.Spring对字段连接点的优缺点?

1.3Spring对AOP的支持_代理类_06

标签:调用,连接点,Spring,1.3,代理,切面,AOP
From: https://blog.51cto.com/u_16287381/7715068

相关文章

  • springmvc的工作流程
    1、springmvc工作原理图    2、springmvc工作流程1、用户向服务端发送一次请求,这个请求会先到前端控制器DispatcherServlet(也叫中央控制器)。2、DispatcherServlet接收到请求后会调用HandlerMapping处理器映射器。由此得知,该请求该由哪个Controller来处理(并未调用Co......
  • SpringMVC使用@Valid注解实现数据验证
    一、@Valid注解的作用@Valid注解是javax.validation包中的一个注解,它可以用来标注需要验证的数据对象。当一个带有@Valid注解的对象传递给SpringMVC的控制器方法时,SpringMVC会自动调用验证器来验证这个对象。二、数据验证的流程SpringMVC中的数据验证流程如下:......
  • SpringMVC拦截器
     1.拦截器接口 2.工作流程 3.配置拦截器1<!--配置拦截器(可多个)-->2<mvc:interceptors>3<mvc:interceptor>4<!--设置拦截器要拦截的url地址-->5<mvc:mappingpath="/user/**"/>6<!--设置拦截器不拦截的url地址-->7......
  • SpringMVC异常处理
     @ControllerAdvice没有切点只有增强1.全局统一异常处理类1packagecom.cn.globalexpction;23importorg.springframework.ui.ModelMap;4importorg.springframework.web.bind.annotation.ControllerAdvice;5importorg.springframework.web.bind.annotation.......
  • SpringMVC resultful架构风格
     <inputtype="hidden"name="_method"value="DELETE"/>  1.RestfulController.java 1packagecom.cn.restful;23importorg.springframework.stereotype.Controller;4importorg.springframework.ui.ModelMap;5......
  • Spring Boot Starter Parent
    在这,您将学习了解SpringBootStarterParent,它是SpringBoot提供的父级Pom文件,旨在提供自动版本依赖管理,帮助我们轻松快速地进行 SpringBoot 开发。什么是SpringBootStarterParent?通过SpringBootStarterParent,我们可以进行简单便捷地包依赖管理。在Spr......
  • springboot+Uniapp+redis开发的AI医疗智能导诊系统源码
    AI+医疗的智能导诊系统源码 自主版权 支持二开一、什么是智能导诊系统?智能导诊系统是一种基于人工智能和大数据技术开发的医疗辅助软件,它能够通过对患者的症状、病史等信息进行计算分析,快速推荐科室和医生。通过简单的描述自身症状,系统即可找到最适合的科室,实现线上高效挂号,线下......
  • Springboot3
    Java17以上1.依赖<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.0</version><relativePath/></parent>2.新特性2.1JakartaEE......
  • SpringSecurity解决WebSecurityConfigurerAdapter过时问题
    旧版通过继承WebSecurityConfiurerAdapter,但是新版本中该类已经被标注为@Deprecated旧版代码packagecom.lzx.config;importcom.lzx.filter.JwtAuthenticationTokenFilter;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.con......
  • 搭建Springboot+Vue+Element的简单系统流程
    今天研究了一下如何把Springboot+Mybatis和Vue+Element结合起来使用详细写一篇博客来记录一下流程吧,因为途中发现了很多的问题首先,创建Springboot项目,惯例添加依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="htt......