返回顶部
首页 > 资讯 > 精选 >Spring AOP的概念与实现过程是什么
  • 155
分享到

Spring AOP的概念与实现过程是什么

2023-07-05 05:07:35 155人浏览 泡泡鱼
摘要

今天小编给大家分享一下spring aop的概念与实现过程是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Ao

今天小编给大家分享一下spring aop的概念与实现过程是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Aop

什么是Aop?

AOP就是面向切面编程,通过预编译方式以及运行期间的动态代理技术来实现程序的统一维护功能。

什么是切面,我理解的切面就是两个方法之间,两个对象之间,两个模块之间就是一个切面。假设在两个模块之间需要共同执行一系列操作,并且最后将这一系列操作注入到两个模块之间的指定位置。此时这一系列操作就是切面,注入这些操作的位置称之为切点。

举例:公司员工上班

A员工上班需要在前台进行打卡,同样的B员工…其他员工都需要在前台打卡,那么如果为每一位员工提供单独的打卡通道就有些过于浪费资源。像这样

Spring AOP的概念与实现过程是什么

于是,在前台这个位置设置接口,声明公共的打卡方法,所有员工共同通过该接口进行打卡,那么在打卡时的一系列校验或者记录的整个操作就可以被称之为切面,前台这个空间位置就被称之为切点,如下图所示

Spring AOP的概念与实现过程是什么

aop主要作用就是进行日志记录、事务/异常处理等功能以便更好地维护开发,主要目的就是将这些行为从项目的业务逻辑代码中分离出来并且降低各个业务逻辑模块之间的耦合度。保证在执行aop操作的同时不会影响到项目的业务逻辑代码

几个概念

Aspect:切面 Aspect中会包含一些pointCut切入点以及一些Advice

Advice:通知 切面需要完成的工作,通过before、after、around来区别是在连接点之前或者之后 或者环绕

Target:目标 目标对象,该对象会被织入advice

PointCut:切点 即切面通知执行的地点 advice将会在这里发生

JointPoint:连接点 所有方法的执行点

PointCut用来修饰JointPoint,PointCut是advice执行的点,而JointPoint表示所有方法的执行点,通过PointCut可以确定哪些JointPoint是可以被织入的点

我们通常不希望advice会在所有的JointPoint点执行,PointCut的作用就是可以进行校验来更精准的匹配执行点。简单概括就是Jointpoint可以执行但未必执行,只有PointCut匹配到了JointPoint才可以在该点执行

Aspect切面可以理解为PointCut+Advice

使用AOP织入导入包

<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --><dependency>  <groupId>org.aspectj</groupId>  <artifactId>aspectjweaver</artifactId>  <version>1.9.7</version>  <scope>runtime</scope></dependency>

实现aop方式一

使用spring内置的api接口

准备:UserService、UserServiceImpl简单实现CRUD

在spring核心配置文件applicationContext.xml中配置aop:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="Http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans      https://www.springframework.org/schema/beans/spring-beans.xsd                     http://www.springframework.org/schema/aop                  https://www.springframework.org/schema/aop/spring-aop.xsd">  <bean id="userServiceImpl" class="com.mount.service.UserServiceImpl"/>  <bean id="log" class="com.mount.log.log"/>  <bean id="afterLog" class="com.mount.log.AfterLog"/>  <!--  配置AOP  -->  <aop:config>    <!-- 切入点 expression表达式  表示从哪里开始执行   -->    <aop:pointcut id="pointcut" expression="execution(* com.mount.service.UserServiceImpl.*(..))"/>    <!--      执行环绕增强  -->    <aop:advisor advice-ref="log" pointcut-ref="pointcut"/>    <aop:advisor advice-ref="afterLog" pointcut-ref="pointcut"/>  </aop:config></beans>

编写执行前后日志

// 执行前  实现spring内置接口MethodBeforeAdvicepublic class log implements MethodBeforeAdvice {    public void before(Method method, Object[] args, Object target) throws Throwable {        System.out.println(target.getClass().getName()+"执行了"+method.getName()+"方法");    }}// 执行后 实现AfterReturningAdvice public class AfterLog implements AfterReturningAdvice {  public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {    System.out.println(target.getClass().getName()+"调用了"+method.getName()+"方法"+"返回的结果为"+returnValue);  }}

测试

@Testpublic void test01(){  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");  UserService bean = context.getBean("userServiceImpl", UserService.class);  bean.insert();}

实现aop方式二

使用自定义类,只需要在applicationContext.xml中重新配置aop,并且自己diy一个类即可,在配置时可以选择任一方法为前置日志或后置日志即可

<!--  配置AOP 方式二  --><bean id="diy" class="com.mount.diyLog.diyLogImpl"/><aop:config>  <!--     自定义切面 ref引入的类   -->  <aop:aspect ref="diy">    <aop:pointcut id="pointcut" expression="execution(* com.mount.service.UserServiceImpl.*(..))"/>    <aop:before method="before" pointcut-ref="pointcut"/>    <aop:after method="after" pointcut-ref="pointcut"/>  </aop:aspect></aop:config>

diylog类

public class diyLog {  public void before(){    System.out.println("===before方法执行===");  }  public void after(){    System.out.println("===after方法执行===");  }}

注解实现aop

首先需要在applicationContext.xml文件中打开SpringAOP对注解的支持

<!-- SpringAop开启注解支持 --><aop:aspectj-autoproxy/><!-- 映射自定义注解实现log类 --><bean id="annoLog" class="com.mount.annoLog.annoLogImpl"/>

annoLog

// Aspect标注该类是一个切面@Aspectpublic class annoLogImpl {  // 前置增强  @Before("execution(* com.mount.service.UserServiceImpl.*(..))")  public void before(){    System.out.println("---方法执行前---");  }  // 后置增强  @After("execution(* com.mount.service.UserServiceImpl.*(..))")  public void after(){    System.out.println("---方法执行后---");  }  // 环绕增强  @Around("execution(* com.yuqu.dao.UserMapperImpl.*(..))")    public Object around(ProceedingJoinPoint pjp) throws Throwable {        System.out.println("环绕前");        Object proceed = pjp.proceed();        System.out.println("环绕后");        System.out.println("执行信息:"+pjp.getSignature());        return proceed;    }}

最终打印:

环绕前
---方法执行前---
删除成功!
---方法执行后---
方法签名Integer com.mount.service.UserService.delete()
方法执行返回=1
环绕后

注意around环绕增强,如果我们执行的sql中是有返回值的话,那么必须显式的将pjp.proceed();返回回去,否则在调用处将会无法获取到结果集,报空指针异常

可以发现,around环绕增强首先执行,在执行到joinPoint.proceed()时,会执行对应方法,执行对应方法的时候才会执行前置或后置的其他增强操作

以上就是“Spring AOP的概念与实现过程是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: Spring AOP的概念与实现过程是什么

本文链接: https://lsjlt.com/news/349637.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Spring AOP的概念与实现过程是什么
    今天小编给大家分享一下Spring AOP的概念与实现过程是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Ao...
    99+
    2023-07-05
  • Spring中AOP的概念是什么
    这篇文章主要介绍“Spring中AOP的概念是什么”,在日常操作中,相信很多人在Spring中AOP的概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring中AOP的概念是什么”的疑惑有所帮助!...
    99+
    2023-07-02
  • Spring AOP基本概念是什么
    本篇内容介绍了“Spring AOP基本概念是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  什么是AOP  AOP即面向切面编程。 ...
    99+
    2023-06-02
  • Spring AOP的基本概念是什么
    这篇文章主要介绍“Spring AOP的基本概念是什么”,在日常操作中,相信很多人在Spring AOP的基本概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring AOP的基本概念是什么”的疑...
    99+
    2023-06-20
  • SpringAOP的概念与实现过程详解
    目录Aop实现aop方式一实现aop方式二注解实现aopAop 什么是Aop? AOP就是面向切面编程,通过预编译方式以及运行期间的动态代理技术来实现程序的统一维护功能。 什么是切面...
    99+
    2023-02-22
    Spring AOP概念 Spring AOP实现方式
  • Spring中Spring Boot与Spring MVC的核心概念是什么
    这篇文章主要介绍了Spring中Spring Boot与Spring MVC的核心概念是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring中Spring Boot与Sp...
    99+
    2023-06-29
  • Spring IOC与DI核心概念是什么
    这篇文章主要介绍“Spring IOC与DI核心概念是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring IOC与DI核心概念是什么”文章能帮助大家解决问题。深入理解...
    99+
    2023-07-05
  • Spring中的bean概念是什么
    这篇文章将为大家详细讲解有关Spring中的bean概念是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Bean是Spring框架中最核心的两个概念之一(另一个是面向切面编程AOP)。1 定义Spri...
    99+
    2023-06-29
  • html5与css3的概念是什么
    今天小编给大家分享一下html5与css3的概念是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2024-04-02
  • ping与TTL的概念是什么
    今天小编给大家分享一下ping与TTL的概念是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。我们所知道的TTL更多的是关...
    99+
    2023-06-27
  • SpringBoot与SpringCache概念是什么
    这篇文章给大家分享的是有关SpringBoot与SpringCache概念是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.SpringCache的概念首先我们知道jpa,jdbc这些东西都是一些规范,比如...
    99+
    2023-06-29
  • Spring框架核心概念是什么
    这篇文章主要为大家展示了“Spring框架核心概念是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring框架核心概念是什么”这篇文章吧。1、Spring是什么简而言之,Spring是企...
    99+
    2023-06-29
  • C++哈夫曼树的概念是什么与怎么实现
    这篇文章主要介绍“C++哈夫曼树的概念是什么与怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++哈夫曼树的概念是什么与怎么实现”文章能帮助大家解决问题。一、 基本概念结点的权: 有某种现实...
    99+
    2023-06-30
  • MySQL存储过程的概念与用法实例
    目录概念特性存储过程通常有以下优点格式创建存储过程定义变量局部变量用户变量系统变量存储过程存储过程传参-in存储过程传参-out存储过程传参-inout流程控制流程控制-判断流程控制...
    99+
    2024-04-02
  • swoole协程的概念是什么
    本篇内容介绍了“swoole协程的概念是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!swoole协程是更加轻量级的线程,一个线程可以拥...
    99+
    2023-06-29
  • Java继承与多态的概念是什么及怎么实现
    这篇文章主要介绍“Java继承与多态的概念是什么及怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java继承与多态的概念是什么及怎么实现”文章能帮助大家解决问题。一、继承1、继承的概念继承机...
    99+
    2023-06-29
  • Java数据结构链表的概念是什么与怎么实现
    本文小编为大家详细介绍“Java数据结构链表的概念是什么与怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java数据结构链表的概念是什么与怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、什么是...
    99+
    2023-06-29
  • JavaScript单线程的概念是什么
    这篇文章主要介绍“JavaScript单线程的概念是什么”,在日常操作中,相信很多人在JavaScript单线程的概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ja...
    99+
    2024-04-02
  • MVCC的概念是什么
    本篇内容主要讲解“MVCC的概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MVCC的概念是什么”吧!MVCC作用MVCC使得大部分支持行锁的事务引擎,...
    99+
    2024-04-02
  • mysql.sock的概念是什么
    这篇文章主要讲解了“mysql.sock的概念是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql.sock的概念是什么”吧! ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作