Spring AOP学习笔记

需明确的几个概念:

l         通知(Advice):用于告知系统将有哪些新的行为。

l         切入点(Pointcut):定义了通知应该在应用到那些连接点。

l         目标对象(Target):被通知的对象。

l         代理(Proxy):将通知应用到目标对象后创建的对象。

 

Spring有两种代理创建方式:

1.     如果目标对象实现了一个或多个接口暴露的方法,Spring将使用JDKjava.lang.reflect.Proxy创建代理。这个类让Spring动态产生一个新的类,它实现了所需的接口,织入了通知,并且代理目标的所有请求。(这篇主要介绍这个方式)

2.    如果目标对象没有实现任何接口,Spring使用CGLIB库生成目标对象的子类。在创建这个子类的时候,Spring将通知织入,并且将对目标对象的调用委托给这个子类。

 

下面以一个实例说明Spring AOP的基本开发方法:

一.创建通知

Spring连接点模型是建立在方法拦截上,这意味着你编写的

Spring通知会在方法调用周围的各个地方织入系统中。

1

TestAopServiceAdvice实现了接口MethodBeforeAdvice(前置通知),并实现它的惟一的方法before,这个类就可以在调用目标对象前被调用。同样的还有AfterReturningAdvice(后置通知)MethodInterceptor(环绕通知),异常通知(ThrowsAdvice),引入通知等。

在这个方法中我们输出了一个字符串TestAopServiceAdvice,用于验证这个方法是否在目标对象前调用了。

注意:我们无法改变before方法中的参数argstarget中的值,args中存的是原来要传入目标对象的变量,target即指目标对象。

 

二.配置Spring XML配置文件

要在Spring中实现AOP,一般情况下需要配置4bean

1.    目标对象(target

2.    通知(advice)

3.    切入点(pointcut)

4.    代理(proxy)

2

切入点又分为静态切入点和动态切入点

l         静态切入点的意思是通知总是被执行,也是最常用的一种切入点。

l         动态切入点根据运行时方法的参数值决定通知是否被执行。

在图2中,定义了使用了一个Spring提供的静态切入点

NameMatchMethodPointAdvisor,它保证了当被调用的方法的名字与给出的映射名字相匹配的时候,这个切入点才匹配。

Spring提供的另一个静态切入点为RegexpMethodPointcutAdvisor,让你可以利用正则表达式来定义切入点,正则表达式需要jakarta-oro.jar包的支持。

 

使用ProxyBeanFactory可以创建一个被通知的类,即代理对象。它的最常用的三个控制行为的属性是:

l         proxyInterfaces:代理应该实现的接口列表。

l         interceptorNames:需要应用到目标对象上的通知Bean的名字。可以是拦截器、Advisor或其他通知类的名字。

注:在用容器的getBean方法时,应该是getBean(代理类的名字),而不是getBean(目标对象的名字),否则AOP无法工作。

转载于:https://www.cnblogs.com/springMVC/archive/2007/08/24/2204671.html

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

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

相关文章

spring mvc学习(44):springMVC运行原理

springMVC处理请求的流程 SpringMVC的工作原理图: SpringMVC流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找)&…

pytorch中的squeeze和unsqueeze

squeeze:压缩,要减少维度。 unsqueeze:解压缩,要增加维度。 torch.squeeze(input),那么会把input中所有维度长度为1的维度去掉。 torch.squeeze(input,dim1),那么在给定dim的情况下,就只去掉dim…

一段按页自动滚动文字或图片的Js代码

<div iddemo style"position:relative;padding:10px;border:solid 1px green;BACKGROUND: #ffffff; OVERFLOW: hidden; WIDTH: 510px; COLOR: red; HEIGHT: 100px"><div id"demo1"style"position:relative;">您的图片或者要滚动的内…

spring mvc学习(45):springMVC的三大组件

SpringMvc框架结构图 处理器映射器&#xff1a;用户请求路径到Controller方法的映射处理器适配器&#xff1a;根据handler(controlelr类&#xff09;的开发方式&#xff08;注解开发/其他开发&#xff09; 方式的不同区寻找不同的处理器适配器 视图解析器&#xff1a;根据hand…

[NLP-CNN] Convolutional Neural Networks for Sentence Classification -2014-EMNLP

1. Overview 本文将CNN用于句子分类任务 (1) 使用静态vector CNN即可取得很好的效果&#xff1b;> 这表明预训练的vector是universal的特征提取器&#xff0c;可以被用于多种分类任务中。 (2) 根据特定任务进行fine-tuning 的vector CNN 取得了更好的效果。 (3) 改进模型架…

知识图谱中三元组抽取

内容来自七月算法nlp课程。 这是要解决知识图谱中的其中一个问题&#xff1a;从非结构文本中抽取三元组。 要解决这个问题&#xff0c;总体思路有通过模板抽取、通过模型抽取。 三元组工业界一般都存储在neo4j中&#xff0c;学术界会采用RDF形式存储。 1结构化数据抽取 定义…

spring mvc学习(46):自定义配置类

上图是目录结构&#xff0c;本节是有问同学的&#xff0c;当好好总结 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

图谱问答-理解query

内容来自七月算法nlp课程。 图谱问题是用户输入一句话&#xff0c;系统返回这句话的答案。这里分多种情况。例如根据实体和关系查询尾实体&#xff0c;或者根据实体查询关系&#xff0c;甚至还会出现多跳的情况&#xff0c;不同的情况采用的方法略有不同。 文章目录1 根据实体…

python NoSuchElementException异常处理

python爬虫程序&#xff0c;用Selenium模拟点击时报出异常NoSuchElementException&#xff1a;Unable to locate...... 出错原因&#xff1a;https://www.cnblogs.com/cttcarrotsgarden/p/11210883.html 异常通常发生于找不到目标元素的时候 导入Selenium的NoSuchElementExcept…

http modules在.net安全认证中的作用

介绍一下如何在asp.net中使用http moudle创建自定义的安全认证首先了解asp.net对web request的处理过程http modules是一个实现了IHTTPModule接口基础类. 用来处理Web Request.asp.net内置的Modules有Output Cache ModuleWindows Authentication ModuleForms Authentication Mo…

图谱问答-句子向量模型部署项目总结(未完)

内容来自七月算法nlp课程。 文章目录1 句子向量1.1 bert句子向量表示相似度效果不好1.2 sentence-bert1 句子向量 句子向量是用于实体消岐的。可以使用Elmo&#xff0c;也可以使用bert。这里介绍用bert生成句子向量。 1.1 bert句子向量表示相似度效果不好 Bert中最常用的句向…

Linux du

linux中du与df的区别和联系 1&#xff0c;两者区别 du&#xff0c;disk usage,是通过搜索文件来计算每个文件的大小然后累加&#xff0c;du能看到的文件只是一些当前存在 的&#xff0c;没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和。df&#xff0c;di…

DataList分页技术-- PagedDataSource类实现DataList和Repeater的分页效果

Asp.net提供了三个功能强大的列表控件&#xff1a;DataGrid、DataList和Repeater控件&#xff0c;但其中只有DataGrid控件提供分页功能。相对DataGrid&#xff0c;DataList和Repeater控件具有更高的样式自定义性&#xff0c;所以很多时候我们喜欢使用DataList或Repeater控件来显…

基于知识图谱的问答系统实践

文章目录1 项目目标1.1 数据情况1.2 问题分类2 技术方案2.1 数据准备2.2 数据入库2.3 查询部分3 模型3.1 问题分类3.1.1 数据准备3.1.2 分类模型TextCNN3.2 不同类型的问题处理逻辑4 总结与优化1 项目目标 1.1 数据情况 基于知识图谱的问答系统&#xff0c;简称为KBQA&#x…

java常用的语句

//判断一个长的字符串中是否包含某一个短的字符串 if (str1.indexOf(str2) ! -1) {return true;//存在 }else {return false; } /*** 消息模板关键字替换* param template 消息内容* param map 替换key-value* return*/ public static String replaceTemplate(String template…

spring mvc学习(48):java判断系统是linux还是windows系统

java判断系统是linux还是windows系统 判断一个系统是windows还是linux? import org.junit.jupiter.api.Test;/*** program: utilsdemo* description: 判断运行的系统是windows还是linux* author: zhangyu* create: 2019-08-12 10:07*/public class JudgeSystem {/*** descript…

二分搜索模板

翻了一下自己的博客。记录了花花酱的二分搜索模板、王争的二分搜索模板。 花花酱的文章中提到&#xff1a;不要试图去找一个正确答案。试图去找一个分割点m&#xff0c;使得x>m&#xff0c;g(x)>0为true。这个始终get不到。 王争的二分模板思路是比较简单的&#xff0c;就…

spring mvc学习(49):返回json数据

json包下载 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">…

【推荐】“水果”公司的复兴 (乔布斯和苹果公司)---Google黑板报

从google黑板报上发现的很好的介绍乔布斯和苹果的文章&#xff1a;“水果”公司的复兴发表者&#xff1a;Google&#xff08;谷歌&#xff09;研究员 吴军1.传奇小子2.迷失方向3.再创辉煌大家可以看一下&#xff0c;感受史蒂夫乔布斯的传奇。转载于:https://www.cnblogs.com/co…

log4j 日志配置

Log4j教程 - Log4j安装 Log4j API包是根据Apache软件许可证分发的。 最新的log4j版本&#xff0c;包括全源代码&#xff0c;类文件和文档可以在http://logging.apache.org/log4j/找到。 我们可以从上面的链接下载apache-log4j-x.x.x.tar.gz或zip文件。 支持库 我们可以使用log4…