| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Spring AOP -> 正文阅读 |
|
[Java知识库]Spring AOP |
AOP(Aspect Oriented Programming)是一种面向切面编程的思想,切面指的是系统的某一个方面。AOP是针对程序中的某一类(某个方面)的功能做统一处理,比如用户登录权限的效验。Spring AOP是一个框架,提供了AOP思想的实现,AOP和Spring AOP的关系就像IoC和DI。 AOP可以实现一下功能: 统一日志记录、统一方法执行时间统计、统一格式返回格式设置、统一的异常处理、事务的开启和提交等,AOP编程是对OOP编程的补充和完善。 在登录授权中AOP的作用: AOP的组成?AOP主要由四点组成,分别是:切面、切点、连接点、通知 切面?切面由切点和通知组成,它是针对某一个功能的具体定义,这个功能可能是登录验证功能,也有可能是日志记录功能,这里可以将AOP形象的比喻为一个数据库,一个AOP就是一个数据库。 切点?切点是一个保存了众多连接点的一个集合,切点是切面中的某个方法,如果将切面比作数据库,那么切点就是数据库里面的表。 通知?我们将切面必须完成工作称为通知,切面的工作就是通知。通知有五种:前置通知(使用@Before)、后置通知(使用@After)、返回之后通知(使用@AfterReturning)、抛出异常通知(使用AfterThrowing)、环绕通知(使用@Around) 上面AOP的组成可以用一张图来表示: Spring AOP的实现?Spring AOP的实现步骤如下: 1.添加Spring AOP框架支持; 2.定义切面和切点; 3.定义通知; 添加Spring AOP框架支持?在pom.xml文件中插入以下框架?
定义切面和切点?
对上面代码的解释: @Aspect这个注解表示这个类是一个AOP类,也就是说这个类是一个切面; @Component这个注解表示组件,当我们不知道具体该给某个类使用那个注解来注入到Spring框架时,我们就可以使用@Component这个注解; @Pointcut这个注解表示该方法是一个切点,它后面跟的是AspectJ表达式(切点表达式)。该表达式的语法:execution(<修饰符><返回类型><包.类.方法(参数)><异常>)
AspectJ支持三种通配符: *:匹配任意字符,只匹配一个元素(这个元素可以是包、类、或者方法、 方法参数)。 ..:匹配任意字符,可以匹配多个元素,在表示类时,必须和*联合使用。? +:表示按照类型匹配指定类的所有类,必须跟在类名后面,如com.cad.Car+,表示继承该类的所有子类包括本身。 表达式示例:execution(* addUser(String,int)):匹配addUser方法,且第一个参数类型是String,第二个参数是int。 定义通知
演示结果: 执行环绕通知:
结果:
Spring AOP实现原理?Spring AOP是构建在动态代理基础上的,因此Spring对AOP的支持局限于方法级别的拦截。Spring AOP支持JDK Proxy和CGLIB方式实现动态代理,而这两类方式底层都是通过反射来实现的。? ? ? ? ? ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/10 16:00:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |