Spring【AOP】

news2024/11/28 8:35:09

AOP-面向切面编程

AOP:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

 

SpringAop中,通过Advice定义横切逻辑,并支持5种类型的Advice: 

导入依赖

<dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.4</version>
        </dependency>

applicationContext.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
       http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd">

</beans>

 

Spring 实现AOP的3种方式

1、使用Spring API 

编写两个扩展功能的类Log、和AfterLog,分别将添加到旧业务的前面和后面

Log类

import org.springframework.aop.MethodBeforeAdvice;

import java.lang.reflect.Method;

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类

import org.springframework.aop.AfterReturningAdvice;

import java.lang.reflect.Method;

public class AfterLog implements AfterReturningAdvice {
    @Override
    public void afterReturning(Object result, Method method, Object[] objects, Object o1) throws Throwable {
        System.out.println("执行了"+method.getName()+"方法,返回结果为"+result);
    }
}

配置spring配置文件 

    <!--方式1-->
    <!--配置aop:需要导入aop的xsi信息-->
    <aop:config>
        <!--切入点 execution(要执行的位置!)-->
        <aop:pointcut id="pointcut" expression="execution(* com.study.service.UserServiceImpl.*(..))"/>
        <!--执行环绕-->
        <aop:advisor advice-ref="log" pointcut-ref="pointcut"/>
        <aop:advisor advice-ref="afterLog" pointcut-ref="pointcut"/>
    </aop:config>

2、自定义类实现

编写一个自定义切面类 DiyPointCut

public class DiyPointCut {
    public void before(){
        System.out.println("方法执行前");
    }
    public void after(){
        System.out.println("方法执行后");
    }
}

配置spring配置文件

 <!--方式2-->
    <bean id="diy" class="com.study.diy.DiyPointCut"/>
    <aop:config>
        <!--自定义切面-->
        <aop:aspect ref="diy">
            <aop:pointcut id="point" expression="execution(* com.study.service.UserServiceImpl.*(..))"/>
            <aop:before method="before" pointcut-ref="point"/>
            <aop:after method="after" pointcut-ref="point"/>
        </aop:aspect>
    </aop:config>

3、使用注解实现AOP

编写类

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

//使用注解实现AOP 标注这个类为一个切面
@Aspect
public class AnnotationPointCut {

    @Before("execution(* com.study.service.UserServiceImpl.*(..))")
    public void before(){
        System.out.println("方法之前执行");
    }
}

编写配置文件

    <!--方式3-->
    <bean id="annotationPointCut" class="com.study.diy.AnnotationPointCut"/>
    <!--开启注解支持!-->
    <aop:aspectj-autoproxy/>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/769452.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux基础服务11——LNMP架构

文章目录 一、环境说明二、安装nginx三、安装mysql四、安装php五、配置nginx六、配置php七、验证 一、环境说明 主机服务192.168.161.129nginx192.168.161.131mysql192.168.161.132php 二、安装nginx 1.参考文章&#xff0c;nginx部署。 三、安装mysql 1.参考文章&#x…

隐私计算大会亮点前瞻:“隐私计算互联互通标准及第二批实践示范征集项目”解读预告

7月26日&#xff0c;2023隐私计算大会将于青岛正式扬帆&#xff0c;本次大会将齐聚业内专家大咖共论行业最新进展&#xff0c;洞察未来发展趋势&#xff0c;共同推进隐私计算行业蓬勃发展。本次大会将公开正式发布解读《隐私计算应用研究报告&#xff08;2023&#xff09;》、“…

QT6之QtWidgets和QWidget

1、概念 如上图&#xff1a; QtWidgets是模块&#xff0c;它不是类。它与Qt core模块等是同级别的模块&#xff0c;它提供了一系列类的来创建界面相关。QWidget是类&#xff0c;它不是模块。它是所有用户界面对象的基类&#xff0c;QWidget 及其子类是开发桌面应用的核心&…

隐私计算大会亮点前瞻:《隐私计算应用研究报告(2023年)》发布预告

7月26日&#xff0c;2023隐私计算大会将于青岛正式扬帆&#xff0c;本次大会将齐聚业内专家大咖共论行业最新进展&#xff0c;洞察未来发展趋势&#xff0c;共同推进隐私计算行业蓬勃发展。 本次大会将公开正式发布《隐私计算应用研究报告&#xff08;2023&#xff09;》、“隐…

IDEA 安装完成无法打开排查插件问题

以前我自己遇到IDEA&#xff08;19.3&#xff09;突然打不开了、所以写过一篇IDEA无法正常启动&#xff08;打不开&报错&#xff09;_idea启动报错_DJyzh的博客-CSDN博客版权声明&#xff1a;转载请附上文章地址https://blog.csdn.net/qq_42672839IDEA无法正常启动 今天在清…

演讲实录:以 AI 变革组织运营与管理

7月14日&#xff0c;以“释放数智生产力”为主题的 Kyligence 用户大会在上海前滩香格里拉大酒店成功举行。大会现场发布了 Kyligence 最新产品家族&#xff1a;AI 数智助理——Kyligence Copilot 的预览版、一站式指标平台 Kyligence Zen 的 Cloud 和 Enterprise 版本&#xf…

0基础学习VR全景平台篇 第66篇:VR直播-如何管理VR直播活动

一、电脑端管理 已创建好的VR直播活动可以在【管理后台】-【作品管理】-【VR直播】列表下查看到。 1、点击活动标题可以直接进入电脑端的播放页面&#xff0c;点击“编辑”按钮可以进入活动的设置界面。 2、电脑端播放页 该链接地址是可以自适应电脑端和手机端的&#xff0c…

C国演义 [第十二章]

第十二章 打家劫舍题目理解步骤dp数组递推公式初始化遍历顺序 代码 打家劫舍II题目理解步骤递推公式初始化遍历顺序 代码 打家劫舍 力扣链接 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋…

微服务Day2——Nacos注册中心入门

Nacos注册中心 1、Nacos简介 国内公司一般都推崇阿里巴巴的技术&#xff0c;比如注册中心&#xff0c;SpringCloudAlibaba也推出了一个名为Nacos的注册中心。 2、Mac安装 进入Nacos官网下载安装包 http://nacos.io/zh-cn/ Github仓库地址 下载解压后进入nacos/bin目录下 …

【论文解读】2017 STGCN: Spatio-Temporal Graph Convolutional Networks

一、简介 使用历史速度数据预测未来时间的速度。同时用于序列学习的RNN(GRU、LSTM等)网络需要迭代训练&#xff0c;它引入了逐步累积的误差&#xff0c;并且RNN模型较难训练。为了解决以上问题&#xff0c;我们提出了新颖的深度学习框架STGCN&#xff0c;用于交通预测。 二、…

【云原生|Docker系列第4篇】Docker的容器的入门实践

欢迎来到云原生系列的第4篇博客&#xff01;在前面的两篇博客中&#xff0c;我们已经学习了Docker镜像的基本概念和入门实践。本篇博客将带您深入了解Docker容器&#xff0c;探索如何使用Docker容器来构建、运行和管理应用程序。无论您是新手还是有一定经验的开发者&#xff0c…

PHP循环

PHP while 循环 PHP SwitchPHP For 循环 PHP while 循环在指定条件为 true 时执行代码块。 PHP 循环 在您编写代码时&#xff0c;经常需要反复运行同一代码块。我们可以使用循环来执行这样的任务&#xff0c;而不是在脚本中添加若干几乎相等的代码行。 在 PHP 中&#xff…

linux安装mysql以及使用navicat连接mysql

目录 一、下载mysql 二、安装mysql 三、使用Navicat连接MySQL 四、常见问题 1、启动服务时报错 Failed to start mysql.service: Unit not found. 的解决方法。 2、登录过程出现&#xff1a;access denied for user’root’‘localhost’(using password:Yes) 的解决方…

Moonbeam生态说|探索Web3链游生态Seascape

「Moonbeam生态说」是Moonbeam中文爱好者社区组织的社区AMA活动。该活动为媒体和已部署Moonriver或Moonbeam的项目方提供了在主流Moonbeam非官方中文社区内介绍自己的项目信息&#xff0c;包括&#xff1a;项目介绍、团队介绍、技术优势和行业发展等&#xff0c;帮助社区内的Mo…

Spring Boot进阶(57):Spring中什么时候不要用@Autowired注入 | 超级详细,建议收藏

1. 前言&#x1f525; 注解Autowired&#xff0c;相信对于我们Java开发者而言并不陌生吧&#xff0c;在SpringBoot或SpringCloud框架中使用那是非常的广泛。但是当我们使用IDEA编辑器开发代码的时候&#xff0c;经常会发现Autowired 注解下面提示小黄线警告&#xff0c;我们把小…

Unity 任意数据在Scene窗口Debug

任意数据在Scene窗口Debug &#x1f354;效果&#x1f96a;食用方法 &#x1f354;效果 如下所示可以很方便的把需要Debug的数据绘制到Scene中&#xff08;普通的Editor脚本只能够对MonoBehaviour进行Debug&#xff09; &#x1f96a;食用方法 &#x1f4a1;. 新建脚本继承Z…

127.0.0.1/linux常用dos命令

ls 命令 LS 命令用于查看目录的内容。默认情况下&#xff0c;此命令将显示当前工作目录的内容。如果要查看其他目录的内容&#xff0c;请键入 ls&#xff0c;然后键入目录的路径。例如&#xff0c;输入 LS / 家 / 用户名 / 文档查看的内容的文件。 ls命令是文件列表命令&#…

Cisco学习笔记(CCNA)——IP Subnetting

IP Subnetting 目录 IP地址 数制的计算 IP地址的分类 特殊IPv4地址 IP地址的组成 子网掩码 IPv4网络中的地址类型 划分子网 ​编辑CIDR IP地址 网络层概念 主机唯一的标识&#xff0c;保证主机间正常通信 一种网络编码&#xff0c;用来确定网络中一个节点 IP地址…

运维:Centos7安装解压版mysql5.7

目录 1、卸载Centos7默认自带的mariadb数据库&#xff0c;避免冲突 2、下载解压版mysql并安装 3、配置mysql 4、mysql客户端访问 MySQL 是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它具有许多优点和一些缺点。以下是 MySQL 的主要优缺点&am…

【C语言+sqlite3 API接口】实现水果超市

实验内容&#xff1a; 假如我家开了个水果超市&#xff0c;有以下水果&#xff0c;想实现自动化管理&#xff0c;扫描二维码就能知道当前的水果状态&#xff0c;进货几天了&#xff0c; 好久需要再次进货&#xff0c;那些水果畅销&#xff0c;那些水果不畅销&#xff0c;那些水…