JAVA企业级开发 1.5 初探Spring AOP

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

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

(一)采用传统方式实现

  • 修改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://xiahunao.cn/news/256478.html

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

相关文章

【JavaSE】Java基础语法(三十九):网络编程入门

文章目录 1. 网络编程概述2. 网络编程三要素3. IP地址4. InetAddress5. 端口和协议 1. 网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络 操作系统&#xff0c;网络管理软件及网络通信协…

欧拉与莫比乌斯

更多文章可以在本人的个人小站&#xff1a;https://kaiserwilheim.github.io 查看。 转载请注明出处。 初稿写于2021-10-10&#xff0c; 再修改于2022-02-07 Achtung: 本文章使用p来代指“任意质数”&#xff0c;请勿混淆。 首先让我们膜拜一下莱昂哈德欧拉(Leonhard Euler)…

贝塞尔

贝塞尔曲线可视化链接 介绍&#xff1a; 贝塞尔曲线&#xff0c;又称贝兹曲线或贝济埃曲线&#xff0c;是应用于二维图形应用程序的数学曲线。一般的矢量图形软件通过它来精确画出曲线&#xff0c;贝兹曲线由线段与节点组成&#xff0c;节点是可拖动的支点&#xff0c;线段像可…

详解人工智能的五大思想流派 元芳你支持哪一派?

▼ 点击上方蓝字 关注网易智能 聚焦AI&#xff0c;读懂下一个大时代&#xff01; 【网易智能讯 3月1日消息】未来的就业形势还能依靠科技巨头和首席执行官们来决定&#xff0c;而人工智能的未来&#xff0c;依旧充满了太多的不确定性。 这一状况是源自于人工智能及其在科技行业…

【科大讯飞】全球首款,Mobius莫比斯同声翻译耳机 ,AI智能运动耳机 ,支持英日法韩俄西班牙6种语音...

© 程序员严选 丨 为您甄选全球好物 科大讯飞重磅推出 翻译界的最新黑科技神器 同声翻译 智能耳机 对方说外语&#xff0c;耳机就会同声语音翻译出来哦~ 。。。 著名语音AI品牌科大讯飞与咪咕联合打造了一款智能翻译耳机&#xff0c;全球首款全语音人工智能耳机——Mobius…

DailyMart03:如何基于DDD设计商城的领域模型?

大家好&#xff0c;我是飘渺。既然有人催更那今天咱们就继续更新DDD&微服务系列&#xff01; 在面向对象开发中&#xff0c;所有事物都可以看作是对象。然而&#xff0c;在日常开发中&#xff0c;我们通常从数据出发来设计对象的表现形式&#xff0c;这种做法侧重于数据属性…

哈萨比斯的人类补完计划

在著名动漫《新世纪福音战士》里&#xff0c;碇源堂和他背后的SEELE组织始终在执行一项叫做“人类补完计划”的神秘行动。 这个计划到底是什么意思&#xff0c;粉丝们已经争吵了很多年。但大体上应该是说利用“神性”来补完人类族群&#xff0c;从而消除人类社会中的种种问题。…

阿基里斯之踵

阿基里斯是古希腊神话中最伟大的英雄之一。相传&#xff0c;他的母亲是一位女神&#xff0c;在他降生之初&#xff0c;女神为了使他长生不死&#xff0c;将他浸入冥河洗礼。阿基里斯从此刀枪不入&#xff0c;百毒不侵&#xff0c;只有一点除外———他的脚踵当时被女神提在手中…

麦比乌斯带

数学家们吐露&#xff0c;麦比乌斯带只有单面&#xff0c;如果你要将它分成两半&#xff0c;你将会感到十分可笑&#xff0c;因为分开后还是一条带。 莫比乌斯环的奇妙之处有三&#xff1a; 一、莫比乌斯环只存在一个面。 二、如果沿着莫比乌斯环的中间剪开&#xff0c;将会形成…

数字与能源,交织成新基建的摩比斯环

提到新基建&#xff0c;大家可能会首先想起大数据、AI、云计算组成的数字产业&#xff0c;以及高铁、城轨、新能源汽车构成的交通产业。但如果你留心分析&#xff0c;会发现新基建的体系里还有一条“暗线”——那就是能源。 无论直接指向能源升级的特高压、充电桩&#xff0c;还…

塞尔希奥·阿奎罗和 The Sandbox 携手合作,激活元宇宙足球迷!

五次英超联赛冠军兼创纪录的得分球员选择了 The Sandbox 平台来创建他的第一个虚拟世界。 简要介绍 阿根廷在串流媒体和游戏领域上的足球传奇人物和全球典范将继续建立新的数字社区&#xff0c;这一次是与 The Sandbox 中的独特空间 Kuniverse。 来自世界各地的球迷将能够关注阿…

莫比乌斯详细介绍

莫比乌斯反演 莫比乌斯反演是数论数学中很重要的内容&#xff0c;可以用于解决很多组合数学的问题。 莫比乌斯函数 莫比乌斯函数&#xff0c;数论函数&#xff0c;由德国数学家和天文学家莫比乌斯提出。梅滕斯首先使用μ(n)作为莫比乌斯函数的记号。 莫比乌斯函数是指以下的…

无主之地kill ajax,阿克斯顿 - 无主之地中文维基 - 灰机wiki

阿克斯顿 艾克斯顿和军刀枪塔 角色类型可选角色(无主之地2) NPC(无主之地&#xff1a;前奏) 性别男性 种族人类 Axton is the playable Commando class character in Borderlands 2 Launch Date Trailer. 背景 Originally from Hieronymous, Axton spent ten years with the Da…

Mahalanobis(马哈拉诺比斯)距离

马氏距离(Mahalanobis Distance)是一种距离的度量&#xff0c;可以看作是欧氏距离的一种修正&#xff0c;修正了欧式距离中各个维度尺度不一致且相关的问题。 马氏距离&#xff08;Mahalanobis Distance&#xff09;是由马哈拉诺比斯&#xff08;P. C. Mahalanobis&#xff09;…

通用寄存器-汇编复习(1)

弄清寄存器表达,原理和配件及汇编实验验证。 往期文章: 汇编语言基础-汇编复习(0)_luozhonghua2000的博客-CSDN博客 一个典型的 CPU(此处讨论的不是某一具体的 CPU)由运算器、控制器、寄存器(CPU工作原理)等器件构成,这些器件靠内部总线相连。前一章所说的总线,相对于 CP…

想把手机内容投屏到电脑 并且可以用电脑控制手机怎么办,很简单

首先打开设置&#xff0c;点击应用》可选功能 点击 查看功能 搜索 无线显示器点击下一步 点击安装 等待安装完成 完成后我们打开 系统》投影到此电脑 把设置改为以下选项&#xff0c;然后单击启动两家应用以投影到此电脑 出现这个画面就对了&#xff0c;接下来我们开始调试手…

发现了一个很好用的电脑上用电脑控制安卓手机的软件

2019独角兽企业重金招聘Python工程师标准>>> 发现了一个很好用的电脑上用电脑控制安卓手机的软件scrcpy&#xff0c; 还是开源的 地址&#xff1a; https://github.com/Genymobile/scrcpy windows,mac os,linux都支持。 基本上没有延迟&#xff0c;电脑屏幕显示安卓…

图解:手机控制电脑的软件的使用教程

在使用IP软件时总是掉线&#xff0c;有时又要出去&#xff0c;不能总呆在电脑旁&#xff0c;所以使用了一个手机控制电脑的软件 使用方法&#xff1a;电脑下载一个这个软件&#xff0c;手机下载一个 下载地址官网&#xff1b;https://www.teamviewer.com/en/download/windows…

手机可以控制电脑?

当你在外时&#xff0c;老师一个电话打过来要文件。 当你躺在床上时&#xff0c;想看看书房的电脑下载学习资料是否掉线。 当你把电脑借给别人用&#xff0c;想偷偷观察他有没有干坏事&#xff0c;电脑不在身边&#xff0c;手机尚在。 用手机控制电脑是一种怎样的体验&#…