【Spring】————AOP详解(五)_sping aop 详解-程序员宅基地

技术标签: -----spring  spring AOP  

小编最近学习spring Aop,对一下基础做了一个总结,以前写的这篇文章SpringBoot——AOP处理请求日志是对日志处理的一个实现。读者们可以先了解一下。

【AOP】

AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。

【基本概念】



1、Corss Cutting Concern:一种独立服务,它遍布在系统的处理流程之中

2、Aspect(切面):对横切性关注点的模块化,通常是一个类,里面可以定义切入点和通知

3、Advice(通知):对横切性关注点的实现,AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around

4、Pointcut(切入点):定义了那些Advice应用到那些JoinPoint上,对Spring来说是方法调用

5、Weave:将Advice应用到Target Object上的过程叫织入,Spring支持的是动态织入

6、Target Object:Advice被应用的对象

7、Proxy:Spring AOP默认使用JDK的动态代理,它的代理是运行时创建,也可以使用CGLIB代理,前者基于接口,后者基于子类,离不开Spring的IOC容器,代理的生成,管理及其依赖关系都是由IOC容器负责

8、Introduction:可以动态的为类添加方法

9、JoinPoint:Advice在应用程序上执行的点或时机,Spring只支持方法的JoinPoint,这个点也可以使属性修改,如:Aspecj可以支持

【基于注解的AOP配置方式】

1.启用@AsjectJ支持,在applicationContext.xml中配置下面一句:

<aop:aspectj-autoproxy />

2.通知类型介绍

(1)Before:在目标方法被调用之前做增强处理,@Before只需要指定切入点表达式即可

(2)AfterReturning:在目标方法正常完成后做增强,@AfterReturning除了指定切入点表达式后,还可以指定一个返回值形参名returning,代表目标方法的返回值

(3)AfterThrowing:主要用来处理程序中未处理的异常,@AfterThrowing除了指定切入点表达式后,还可以指定一个throwing的返回值形参名,可以通过该形参名来访问目标方法中所抛出的异常对象

(4)After:在目标方法完成之后做增强,无论目标方法时候成功完成。@After可以指定一个切入点表达式

(5)Around:环绕通知,在目标方法完成前后做增强处理,环绕通知是最重要的通知类型,像事务,日志等都是环绕通知,注意编程中核心是一个ProceedingJoinPoint

3、代码实现

一、UserManager.java

public interface UserManager {
    public void addUser(String userName, String password);
    public void delUser(int id);
    public String findUserById(int userId);
    public void modefyUser(int userId, String username, String password);


}

  二、UserManagerImp

public class UserManagerImp implements UserManager {

    @Override
    public void addUser(String userName, String password) {

        System.out.println("addUser");
    }

    @Override
    public void delUser(int id) {

        System.out.println("delUser");
    }

    @Override
    public String findUserById(int userId) {

        System.out.println("findUserById");
        return "张三";
    }

    @Override
    public void modefyUser(int userId, String username, String password) {

        System.out.println("modefyUser");

    }


}
三、Sercurity.java

(1)将横切性关注点模块化,建立SecurityHandler.java

(2)采用注解指定SecurityHandler为Aspect

(3)采用注解定义Advice和Pointcut


(4)applicationContext-Annotation.xml中配置启动AspectJ对Annotation的支持,并且将目标类和Aspect类配置到IOC容器中


(5)开发客户端


【基于配置文件方式】

配置文件中的内容发生了改变


【AOP对表达式的支持】


【将客户调用信息传递到Advice中】


【AOP JDK动态代理和CGLIB代理的差别】

好了,小编今天的博客就先写到这里了,以后有机会继续补充关于Spring AOP的内容。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tengliu6/article/details/80605789

智能推荐

smartconfig一键配置udp原理_为什么smart config使用udp-程序员宅基地

文章浏览阅读4.6k次。1、一种基于WIFI通信的电子设备接入网方法,其特征在于,所述方法包括: 步骤S1:发送端将需传输的原始数据信息加密为十六进制形式的待发送数据; 步骤S2:发送端将待发送数据以及数据索引加入多播IP地址; 步骤S3:发送端将该多播IP地址映射为对应的多播MAC地址; 步骤S4:发送端重复发出包含该多播MAC地址的多播数据包; 步骤S5:接收端根_为什么smart config使用udp

btslab全攻略——搭建安装和sql注入-程序员宅基地

文章浏览阅读1.1k次。一、介绍直接引用官方说明BTS PenTesting Lab is an open source vulnerable web application, created by Cyber Security & Privacy Foundation (www.cysecurity.org). It can be used to learn about many different types of web application vulnerabilities.Currently, th_btslab

python可以这样学怎么样_笨办法学python怎么样-程序员宅基地

文章浏览阅读52次。python小白在开始学习之前,都会纠结到底选择一本什么样的书籍来作为入门的教材。今天我们讲一讲《笨办法学python》这本书。在这本书的帮助下,你将通过非常简单的练习学会一门编程语言。做练习 是每个程序员的必经之路:1.从头到尾完成每一个习题。2.一字不差地录入每一段程序。3.让程序运行起来。就是这样,刚开始可能会非常难,但你要坚持下去。如果你通读了这本书,并且每晚花一两个小时做习题,你可以为自..._python可以这样学 怎么样

C# GPIB通讯_c#对接gpib-程序员宅基地

文章浏览阅读341次,点赞8次,收藏6次。dll 和 Ivi.Visa.Interop.dll。安装NIVISA版本驱动dll会在C盘。需要引用以下两个dll;_c#对接gpib

WZOI-216猴子吃桃_猴子吃桃wzoi-程序员宅基地

文章浏览阅读108次。WZOI-216猴子吃桃_猴子吃桃wzoi

排污口漂浮物监测系统 yolov5_yolo5水面漂浮物检测-程序员宅基地

文章浏览阅读633次。排污口漂浮物监测系统通过YOLOV5网络模型技术,排污口漂浮物监测算法模型对河道两岸各处排污口进行7*24小时不间断实时监测,当监测到河道两岸的排污口违规乱排乱放时,不需人为干预系统立即抓拍存档告警。我们选择当下YOLO卷积神经网络YOLOv5来进行排污口识别检测。6月9日,Ultralytics公司开源了YOLOv5,离上一次YOLOv4发布不到50天。而且这一次的YOLOv5是完全基于PyTorch实现的!在我们还对YOLOv4的各种高端操作、丰富的实验对比惊叹不已时,YOLOv5又带来了更强实时目标检_yolo5水面漂浮物检测

随便推点

docker-compose使用多个docker-compose.yaml配置文件创建容器_容器中多个yaml-程序员宅基地

文章浏览阅读4.6k次。docker-compose.yaml文件创建容器是十分方便的,只用运行docker-compose up -d就可创建好配置文件里所有的容器了,但是如果有多个容器,又不想都放在一个docker-compose.yaml文件里怎么办呢?没关系,docker-compose命令的-f参数支持使用多个配置文件,1)一次使用多个文件docker-compose -f ./docker-compose.a.yaml -f ./docker-compse.b.yaml up -d如果是多个文件就使用多_容器中多个yaml

系统架构设计师-第12章-信息系绍酣忽如何里论与实践-软考-学习笔记(1)-程序员宅基地

文章浏览阅读600次,点赞9次,收藏5次。定义1 : 软件或计算机系统的信息系统架构是该系统的一个(或多个)结构,而结构由软件元素、元素的外部可见属性及它们之间的关系组成。定义2: 信息系统架构为软件系统提供了一个结构、行为和属性的高级抽象, 由构成系统元素的描述、这些元素的相互作用、指导元素集成的模式及这些模式的约束组成。定义3: 信息系统架构是指一个系统的基础组织,它具体体现在:系统的构件,构件之间、构件与环境之间的关系,以及指导其设计和演化的原则上。

全景图拼接和视频行人检测(Python + opencv)-程序员宅基地

文章浏览阅读326次,点赞5次,收藏6次。3. 根据关键点特征和描述符, 对两张图像进行匹配, 得到若干匹配点对, 并移除错误匹配4. 使用Ransac算法和匹配的特征来估计单应矩阵(homography matrix)5. 通过单应矩阵来对图像进行仿射变换6. 两图像拼接,重叠部分融合7. 裁剪以获得美观的最终图像本次实验通过拍摄多组不同的图片来实现图像的拼接.这里拼接的结果如下图这里获得的图像为拼接后的公共部分,拼接效果并不明显。以下实验用例来自。

Android开发者跳槽面试,含BATJM大厂,Android开发全套学习-程序员宅基地

文章浏览阅读647次,点赞14次,收藏10次。本文的特点在于将繁琐的知识化为系列专题的形式展现给读者,当你能跟随博主构建的体系化学习知识点时,恭喜你,你已经干掉了BAT、字节、网易等大厂的几乎80%以上的Android开发人员。一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!接下来给大家介绍一份体系化的学习资料,是由我和我的伙伴们历经4个多月,整理编写而成的,他考的是策略模式+工厂模式。

JNI原理学习,2024年最新面试总结报告范文-程序员宅基地

文章浏览阅读684次,点赞14次,收藏22次。*要想成为高级安卓工程师,必须掌握许多基础的知识。**在工作中,这些原理可以极大的帮助我们理解技术,在面试中,更是可以帮助我们应对大厂面试官的刁难。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)一个人可以走的很快,但一群人才能走的更远!

深入学习Java代码审计技巧—详细剖析某erp漏洞-程序员宅基地

文章浏览阅读605次,点赞17次,收藏27次。后续通过学习codeql来提高审计效率,漏洞寻找过程并不困难,写出来需要花费时间,文章写的匆忙,代码中关键处含有注释,若有错误,请批评指正!

推荐文章

热门文章

相关标签