使用Spring实现Aop三种方法

使用Spring实现Aop三种方法

**
方式一 :使用spring的AP接口
方式二 : 自定义来实现AOP (主要是切面定义)
方式三 :使用注解实现AOP
**

文章目录

  • 使用Spring实现Aop三种方法
  • 前言
  • jar 依赖
  • 方式一 :使用spring的AP接口
  • 方式二 :自定义来实现AOP (主要是切面定义)
  • 方式三 :使用注解实现AOP
    • 发现问题:
    • 解决方法


前言

jar 依赖

使用AOP 植入 ,需要导入依赖包aspectj

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

方式一 :使用spring的AP接口

定义uservice接口

public interface uservice {
    public void add();
    public void update();
    public void delete();
    public void select();
}

接口实现类userviceImpl

public class userviceImpl implements uservice {
    @Override
    public void add() {
    System.out.println("增加");
    }

    @Override
    public void update() {
        System.out.println("修改");
    }

    @Override
    public void delete() {
        System.out.println("删除");
    }

    @Override
    public void select() {
        System.out.println("查询");
    }
}

创建要做代理 为uservice 添加日志 的log类

public class Log implements MethodBeforeAdvice {
    /*
    * method :要执行的对象发法
    *args   参数
    * target 目标对象
    * */
    @Override
    public void before(Method method, Object[] args, Object target) throws Throwable {

    System.out.println(target.getClass().getName()+"的"+method.getName());
    }
}

创建afterlog 类

public class afterLog implements AfterReturningAdvice {
    @Override//returnValue返回值
    public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
    System.out.println("执行了"+method.getName()+"返回了"+returnValue);
    }
}

ben.xml

<?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="uservice" class="com.powernode.demo04.userviceImpl"/>
    <bean id="log" class="com.powernode.demo04.Log"/>
    <bean id="after" class="com.powernode.demo04.afterLog"/>

    <!-- 方式一  使用原声spring API 接口 -->
    <!-- 配置Aop 需要导入Aop约束-->
    <aop:config>
        <!-- 切入点   pointcut:表达式  execution 要执行的位置-->
        <aop:pointcut id="pointcut" expression="execution(* com.powernode.demo04.userviceImpl.*(..))"/>

        <!-- 执行环绕增强 -->
        <aop:advisor advice-ref="log" pointcut-ref="pointcut"/>
        <aop:advisor advice-ref="after" pointcut-ref="pointcut"/>
    </aop:config>


</beans>


创建测试:

public class test  {

  public static void main(String[] args) {
    //
      ApplicationContext Context = new ClassPathXmlApplicationContext("bean.xml");
      //动态代理代理的是接口
      uservice uservice = Context.getBean("uservice", uservice.class);
      uservice.add();   

  }
}

在这里插入图片描述

方式二 :自定义来实现AOP (主要是切面定义)

div 自定义一个类

public class div {
    public void before(){
    System.out.println("方式二 ---- 之前");
    }

    public void after(){
    System.out.println("方式二 ---- 之后");
    }
}

bean.xml

   <!-- 方式二 :自定义来实现AOP  (主要是切面定义) -->
    <bean id="div" class="com.powernode.demo04.div"/>
    <aop:config>
        <!-- 自定义切面  ref 要引用的类 -->
        <aop:aspect ref="div">
            <!-- 切入点 -->
            <aop:pointcut id="pointcut" expression="execution(* com.powernode.demo04.userviceImpl.*(..))"/>
           <!-- 要加入的发法 -->
            <aop:after method="after" pointcut-ref="pointcut"/>
            <aop:before method="before" pointcut-ref="pointcut"/>
        </aop:aspect>
    </aop:config>

测试结果:
在这里插入图片描述

分析:
在这里插入图片描述

方式三 :使用注解实现AOP

创建annotation类

package com.powernode.demo04;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect // 标志这个类是一个切面
public class annotation {

  @Before("execution(* com.powernode.demo04.userviceImpl.*(..))")
  public void before() {
    System.out.println("---- 发法执行前-----");
  }

  @After("execution(* com.powernode.demo04.userviceImpl.*(..))")
  public void after() {
    System.out.println("---- 发法执行后-----");
  }

  // 加入环绕增强
  @Around("execution(* com.powernode.demo04.userviceImpl.*(..))")
  public void around(ProceedingJoinPoint jp) throws Throwable {
    System.out.println("环绕前");

    // 执行发法
    Object proceed = jp.proceed();

    System.out.println("环绕后");
  }
}

bean.xml

 <!-- 方式三  使用注解 -->
    <bean id="annotation" class="com.powernode.demo04.annotation"/>
    <!-- 开启注解  JDK(默认 expose-proxy="false" ) cglib(expose-proxy="true")  -->
    <aop:aspectj-autoproxy expose-proxy="false"/>

测试:


  public static void main(String[] args) {
    //
      ApplicationContext Context = new ClassPathXmlApplicationContext("bean.xml");
      //动态代理代理的是接口
      uservice uservice = Context.getBean("uservice", uservice.class);
      uservice.add();

  }
}

在这里插入图片描述执行顺序 :环绕前 – 执行前 – 方法 --执行后 – 环绕后

代码分析:

在这里插入图片描述

发现问题:

发现@Aspect注解无法进行解析,Cannot resolve symbol ‘Aspcet’。
在这里插入图片描述

解决方法

导入的依赖aspect包
在这里插入图片描述

这个依赖时,多了个 runtime属性,发现它:
一般是运行和测试环境使用,编译时候不用加入classpath,打包时候会打包到目标包中。一般是通过动态加载或接口反射加载的情况比较多。也就是说程序只使用了接口,具体的时候可能有多个,运行时通过配置文件或jar包扫描动态加载的情况。典型的包括:JDBC驱动等。
于是将这一行代码注释掉,@Aspect注解添加成功!

huangshaohui00
关注 关注
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SpringAOP详解三种实现方式及其使用案例
qq_46993700的博客
06-04 3783
文章目录一、AOP(一)什么是AOP(二)AOP与代理模式(三)AOPSpring中的作用(四)使用Spring实现AOP(重点)(五)Spring中的事务(六)Spring的事务传播级别二、整合Mybatis案例 一、AOP (一)什么是AOP AOP(Aspect Oriented Programming)意为:面向切面编程,体现了横切的思想,意思是在添加某项功能的时候,是以切面插入的方式实现的,对原有的代码不会产生改变。通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的
springAOP的三种实现方式示例代码
08-18
Spring AOP 三种实现方式示例代码 Spring AOP(Aspect-Oriented Programming)是 Spring 框架中的一种面向方面编程技术,主要用于解决横切关注点的问题。AOP 的主要思想是将横切逻辑代码从业务逻辑代码中分离出来,...
Spring实现AOP的4种方式
10-25
Spring实现AOP有很多方式,这里总结了四种,有基于代理的实现方式,也有基于AspectJ 的注解方式,还有基于AOP标签的配置
Spring AOP的三种实现方式
BAI20010904的博客
01-14 1万+
目录 一、什么是AOP 二、Spring AOP的三种实现方式 1.通过Spring API实现AOP (1)编写业务接口和实现类 (2)编写增强类,并实现Spring API相关接口的方法 (3)在resource目录下新建applicationContext文件,实现java类的创建和aop的织入 (4)编写测试类 2.通过自定义类来实现(推荐) (1)自定义切入类 (2)去spring中配置 (3)编写测试类 3.使用注解实现 (1)自定义增强类(注解实现) (2)..
Spring高手之路18——从XML配置角度理解Spring AOP
卓越无关环境,保持空杯心态——靡不有初,鲜克有终
05-12 1万+
本文是全面解析面向切面编程的实践指南。通过深入讲解切面、连接点、通知等关键概念,以及通过XML配置实现Spring AOP的步骤。
Spring实现AOP的三种方式
人工智蟑的博客
02-21 1833
总结了Spring实现AOP的三种方式,以及记录了注解时的注意事项,Spring实现代理的方式,进一步理解AOP设计思想
Spring实现AOP之四种方式详解
LittleByte1的博客
06-22 2889
AOP:Aspect Oriented Programming 面向切面编程 在不改变业务方法的同时可以对方法进行功能增强,Spring的两大特色IOC(Inversion of Controler控制反转)和AOP之一. Spring中提供了四种实现AOP的方式:实现Spring提供的AOP接口   1.使用JDK提供的代理方式(又分为静态和动态)   2.使用原生Spring API接口   3.使用Spring纯配置实现   4.使用Spring注解 一.使用JDK提供的代理方式(此种方式不依赖于Sp
Spring实现AOP的三种方式
七一
08-16 1245
1、什么是AOP AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 2、AOPSpring中的作用 横切关注点:跨越应用程序多个模块的方法或功能。即是,与我们业务逻辑无
spring-aop 三种实现切面的方式
butcher的博客
07-09 8270
1、概念 AOP (Aspect Oriented Programming)意为∶面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 2、实现方式 使用之前需要导入aspectj织入包 <dependency> &
细说Spring——AOP详解(AOP概览)
热门推荐
啦啦啦的博客
05-30 53万+
一、对AOP的初印象 首先先给出一段比较专业的术语(来自百度): 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方 式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个 热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑 的各个部分进行隔离,从而...
SpringAOP的三种方式
小楼一夜听春雨
09-29 2695
AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。1.在diy包下定义自己的diyPointCut切入类,里面有具体的方法
详解在Spring中如何使用AspectJ来实现AOP
08-27
标签:Spring AspectJ实现AOP Spring实现AOP 知识点: 1. AspectJ基础:AspectJ是一个Java实现的面向方面编程(AOP)框架,通过注解来描述切点和增强。AspectJ提供了一个完整的AOP解决方案,包括切点、增强、织入...
使用Spring的注解方式实现AOP实例
08-30
使用Spring的注解方式实现AOP实例 使用Spring的注解方式实现AOP实例是指通过使用Spring框架提供的注解方式来实现Aspect-Oriented Programming(面向方面编程)的功能。AOP是面向对象编程的一种补充,能够将跨越多个...
springboot+aspect实现springaop拦截指定方法.zip
10-21
项目中含有一整个springboot实现aop的功能,在拦截的方法形式上有两种一种是通过切点设置为拦截某个包路径下面的类中的所有方法;还有一种是基于某个自定义注解的.
Java利用spring aop进行监测方法执行耗时
05-25
代码实现简单,易于维护:使用 Spring AOP 可以将耗时监测的逻辑与业务逻辑进行解耦,避免业务逻辑代码的冗余和代码维护难度的提高。 2. 安全性高:使用 Spring AOP 进行方法耗时监测,可以在不修改业务逻辑代码的...
springboot相关的一些知识
qq_44288171的博客
06-17 954
创建项目:首先创建一个普通的maven项目,并且在pom文件中引入spring-boot-autoconfigure依赖,此依赖为SpringBoot自动配置机制的核心。若是自定义的start涉及到属性的配置,也就是需要在YML中配置属性,则可以引入如下依赖-- 使用Spring Boot的最新稳定版 --> < relativePath />
Spring IOC 控制反转(注解版)
Dreadnaught的博客
06-17 651
Spring 框架中的核心概念之一就是控制反转(Inversion of Control,IoC)。IOC就是一种思想,而依赖注入(Dependency Injection, DI)是控制反转的一种实现方式。Spring本身是一个容器,存的是对象。对象这个词,在 Spring的范围内,称之为 Bean。控制反转(Inversion of Control,IoC)是一种设计原则,它将对象的创建和依赖关系的管理从程序代码中解耦出来,交由框架或容器进行处理。
Vue + SpringBoot 实现文件的断点上传、秒传,存储到Minio
最新发布
m0_73179389的博客
06-19 561
前端页面使用的elment-plus的el-upload组件。当上传文件后,会调用handleChange 方法,可以在这里进行文件相关的操作。计算文件的MD5值。
spring实现aop的4种方式
04-30
Spring是一个流行的Java开发框架,提供了多种实现AOP的方式,以下是其中四种主要的实现方式。 1. 基于XML配置实现AOP 在XML文件中定义切面,指定切入点和增强的类型,例如前置增强、后置增强、环绕增强等,然后将...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • npm ERR! 404 Not Found - GET https://registry.npmmirror.com/@vue%2fvue-loader-v15 - [NOT_FOUND] @vue 7487
  • DataSource: ‘url‘ attribute is not specified and no embedded datasource could be configured 6843
  • 解决vue ui 连接已断开 问题 5815
  • Redis解决高并发问题 5637
  • Security(安全框架) 3783

分类专栏

  • vue 1篇

最新评论

  • 泛微E9 -明细表附件上传同步识别二维码功能,zxing+opencv实现

    CSDN-Ada助手: 推荐 OpenCV 技能树:https://edu.csdn.net/skill/opencv?utm_source=AI_act_opencv

  • 解决vue ui 连接已断开 问题

    无心法师979: 本方法我已解决

  • 解决vue ui 连接已断开 问题

    Avengerrr: 笑死,我按这个流程不行。 反而卸载后重新安装cli,成功了。

  • 解决vue ui 连接已断开 问题

    然鹅80: 一样的情况

  • 解决vue ui 连接已断开 问题

    只会log: 大佬,我跟你这个操作一步来的,没用呀

大家在看

  • 二叉搜索树详解
  • [C++][设计模式][桥模式]详细讲解 84
  • 【Android面试八股文】你能说一说Android动画的分类和区别吗? 2
  • Java毕业设计-城市公交车线路排班管理系统
  • Leetcode40 无重复组合之和 1

最新文章

  • 泛微E9 -明细表附件上传同步识别二维码功能,zxing+opencv实现
  • Seta分布式事务
  • Sentinel流控
2024年1篇
2022年59篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huangshaohui00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳SEO优化公司南山百度网站优化排名爱联网站seo优化松岗网站优化按天扣费观澜百搜标王南联网站推广方案布吉网页设计坂田关键词按天扣费沙井外贸网站制作爱联高端网站设计深圳至尊标王丹竹头seo布吉百搜词包平湖英文网站建设西乡模板推广同乐建设网站平湖网站排名优化木棉湾网站制作设计木棉湾网站建设广州设计公司网站坪山网站推广民治网站搜索优化深圳网站改版东莞网站制作惠州标王罗湖百姓网标王宝安网站改版大鹏seo排名深圳网站优化排名西乡网站推广工具民治网站推广歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化