JAVA企业级开发 1.5 初探Spring AOP

news/2024/12/31 6:05:15/

一、提出游吟诗人唱赞歌任务

  • 骑士执行任务前和执行任务后,游吟诗人唱赞歌

(一)采用传统方式实现

  • 修改day04子包的勇敢骑士类
    请添加图片描述

  • 修改day04子包里的救美骑士类
    请添加图片描述

  • 执行测试类 - TestKnight
    请添加图片描述

(二)采用传统方式实现的缺点

  • 每个骑士类的embarkOnQuest()方法都要修改,耦合度太高,当骑士类数量很大时,这个任务完成起来就十分枯燥繁琐。
  • 下面采用AOP方式来实现同样的功能,大家通过对比可以更好地体会采用AOP方式的优越性。

二、采用配置方式使用AOP

(一)创建本讲所需子包

  • net.huawei.spring包里创建day05.aop_xml子包

(二)创建杀龙任务类

  • 在aop_xml子包里创建杀龙任务类 - SlayDragonQuest
package net.huawei.spring.day05.aop_xml;import org.springframework.stereotype.Component;/*** 功能:杀龙任务类*/
@Component
public class SlayDragonQuest {public void embark() {System.out.println("执行杀龙任务……");}
}

(三)创建勇敢骑士类

  • 在aop_xml子包里创建勇敢骑士类 - BraveKnight
package net.huawei.spring.day05.aop_xml;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;/*** 功能:勇敢骑士类*/
@Component("RobinHood")
public class BraveKnight {@Value("罗宾汉")private String name;@Autowiredprivate SlayDragonQuest slayDragonQuest;public void embarkOnQuest() {System.out.print("勇敢骑士[" + name + "]");slayDragonQuest.embark();}
}

(四)创建游吟诗人类

  • 在aop_xml子包里创建游吟诗人类 - Minstrel
package net.huawei.spring.day05.aop_xml;import org.springframework.stereotype.Component;/*** 功能:游吟诗人类*/
@Component
public class Minstrel {/*** 骑士出发前唱赞歌*/public void singBeforeQuest() {System.out.println("啦啦啦,骑士出发了~");}/*** 骑士凯旋时唱赞歌*/public void singAfterQuest() {System.out.println("真棒啊!骑士完成了任务~");}
}

(五)创建Spring配置文件
在resources里创建aop_xml目录,在里面创建spring-config.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:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd"><!--组件扫描--><context:component-scan base-package="net.huawei.spring.day05.aop_xml"/><!--配置AOP--><aop:config><!--定义切面--><aop:aspect ref="minstrel"><!--定义切点--><aop:pointcut id="embark" expression="execution(* net.huawei.spring.day05..*.embarkOnQuest(..))"/><!--声明前置通知--><aop:before method="singBeforeQuest" pointcut-ref="embark"/><!--声明后置通知--><aop:after method="singAfterQuest" pointcut-ref="embark"/></aop:aspect></aop:config>
</beans>

1、切点

在使用Spring框架配置AOP时,不管是通过XML配置文件还是注解方式,都需要定义pointcut(切点)。

2、切点表达式

拦截指定包及其子包下所有类的指定方法:“execution(* net.huawei.spring.day05….embarkOnQuest(…))"
拦截指定包及其子包下所有类的所有方法:"execution(
net.huawei.spring.day05….(…))”

3、切点函数

execution()是最常用的切点函数,整个表达式可以分为五个部分。

execution():表达式主体。
第一个*号:表示返回类型,号表示所有的类型。
包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,`net.huaweispring.day05包、子孙包下所有类的方法。
第二个
号:表示类名,*号表示所有的类。
*(…):最后这个星号表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数。

(六)添加AOP相关依赖

在pom.xml文件里添加AOP相关依赖

<!--Spring AOP-->                                         
<dependency>                                              <groupId>org.springframework</groupId>                <artifactId>spring-aop</artifactId>                   <version>5.3.25</version>                  
</dependency>                                             
<!--AspectJ支持-->                                          
<dependency>                                              <groupId>aspectj</groupId>                            <artifactId>aspectjrt</artifactId>                    <version>1.5.4</version>                              
</dependency>                                             
<dependency>                                              <groupId>org.aspectj</groupId>                        <artifactId>aspectjweaver</artifactId>                <version>1.9.19</version>                              <scope>runtime</scope>                                
</dependency>       

注意:添加新的依赖之后,记得更新

(七)创建测试类 - TestKnight

  • 在test/java里创建net.huawei.spring.day05.aop_xml包,在包里创建TestKnight类
package net.huawei.spring.day05.aop_xml;import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 功能:测试骑士类*/
public class TestKnight {private ClassPathXmlApplicationContext context; // 基于类路径XML配置文件的应用容器@Before public void init() {// 基于Spring配置文件创建应用容器context = new ClassPathXmlApplicationContext("aop_xml/spring-config.xml");        }@Testpublic void testBraveKnight() {// 根据名称从应用容器里获取勇敢骑士对象BraveKnight braveKnight = (BraveKnight) context.getBean("RobinHood");// 勇敢骑士执行任务braveKnight.embarkOnQuest();}@After public void destroy() {// 关闭应用容器context.close();        }
}

(八)运行测试方法,查看结果
运行testBraveKinght()方法
请添加图片描述


http://www.ppmy.cn/news/111514.html

相关文章

实验篇(7.2) 02. 部署物理实验环境(上)❀ 远程访问

【简介】当大家了解到并不需要很高的代价就可以动手做FortiOS 7.2的实验&#xff0c;很多人愿意尝试使用FortiGate防火墙硬件来学习最验难掌握的远程访问部分&#xff0c;这里我们将学习现场部署一套物理实验环境&#xff0c;让大家看到&#xff0c;在一张桌子上&#xff0c;在…

Windows10系统下Nacos下载安装+简单示例

Windows10系统下Nacos版本与下载链接 版本号下载地址2.0.1https://github.com/alibaba/nacos/releases/tag/2.0.11.4.2https://github.com/alibaba/nacos/releases/tag/1.4.21.3.2https://github.com/alibaba/nacos/releases/tag/1.3.2 Nacos常用命令 命令描述startup.cmd -…

联想笔记本指纹未连接到计算机,联想笔记本电脑指纹识别如何设置?联想电脑指纹识别配置教程...

联想指纹识别怎么设置&#xff1f;部分联想笔记本电脑带有指纹识别系统&#xff0c;可能用户对此比较陌生&#xff0c;如果你未曾设置过指纹识别系统&#xff0c;请确保该操作系统安装了指纹识别系统的驱动&#xff0c;并参考联想昭阳K27(下文)的指纹识别系统步骤设置。 联想指…

如何快速在WEB系统下集成指纹识别登录

首先我们看一下web集成指纹的效果&#xff1a; <script type"text/javascript">var webSocket new WebSocket(ws://localhost:8099);var feature;var template;var mode;var capturenum;var imgdata new Array();webSocket.onerror function(event) {onEr…

浏览器指纹反爬虫

浏览器指纹反爬虫 在现行的网络爬虫检测技术中&#xff0c;主要有以下两大类&#xff1a; 行为检测指纹识别 行为检测是通过分析网页上用户的操作&#xff08;鼠标的移动、点击、滚动行为和浏览行为&#xff09;来判断操作者是否是机器控制的网络爬虫。 而指纹识别则是通过分…

服务器显示器接鼠标和键盘,接口、显示器及鼠标键盘设计

接口、显示器及鼠标键盘设计 华硕ES5000机身背部除了上一页中提到的散热网孔之外&#xff0c;还设计有相当全面的接口&#xff0c;包括4个USB 2.0、音频输入输出、RJ-45以太网、PS/2键盘以及HDMI。这里需要特别指出的是&#xff0c;由于采用了独立显卡设计&#xff0c;所以整…

vmlogin指纹浏览器中设置本地API进行常规自动化操作

启动接口添加参数 notifications2 可以禁止网站通知提示框。 http://127.0.0.1:35000/api/v1/profile/start?profileIdxxxxxxxxxxx&skiplocktrueifications2 鼠标点击&#xff1a;GET传参x&#xff0c;y坐标为鼠标点击的坐标&#xff0c;页面可视的左上角为0&#xff0c…

根据matlab的指纹图像增强方法

基于MATLAB的指纹比对系统[GUI界面] 设计概述题目&#xff1a;指纹图像的增强方法基本要求&#xff1a;读取初始指纹图像&#xff0c;设计程序&#xff0c;实现指纹图像的增强&#xff0c;使指纹的纹理更加清晰&#xff0c;便于识别。指纹图像增强的意义&#xff1a; 指纹是人类…