Spring 中AOP及前后置增强案例
1、AOP面向切面编程
面向切面编程的本质:面向切面编程,指扩展功能不修改源代码,将功能代码从业务逻辑代码中分离出来。
1主要功能:日志记录,性能统计,安全控制,事务处理,异常处理等等。
2主要意图:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
2、AOP原理
- 将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决
 - 采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能。
 
3、AOP相关术语
1 增强处理类型
- 前置增强:目标方法调用前
 - 后置增强:目标方法调用后
 - 环绕增强:前置+后置
 - 异常抛出增强:只有在目标方法抛出异常时才执行
 - 最终增强:finally
 
2 AOP的设计单元
| 
 术语名称  | 
 描述  | 
| 
 切面(Aspect)  | 
 横切关注点而被模块化的类,称之为切面  | 
| 
 通知(Advice)  | 
 切面要完成的工作,具体指代切面类中的某个方法  | 
| 
 连接点(Join Point)  | 
 一个应用在执行的过程中能被插入切面的一个点  | 
| 
 切点(Point Cut)  | 
 通配表达式,可以匹配一个或多个连接点  | 
| 
 织入(Weaving)  | 
 将切面应用到目标对象的代理对象的过程  | 
4、AOP案例实现增强
(1)导入依赖
    
(2)实体类UserInfo 实现Serializable接口
    
(3)mapper中IUserInfoMapper接口
    
(4)mapper接口的实现类IUserInfoMapperImpl
    
(5)service中IUserInfoService接口
    
(6)service中接口实现类IUserInfoServiceImpl
    
(7)编码方式实现AOP
    
(8)增强类
    
(9)配置文件applicationContext.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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd"> <!--声明Daobean bean的注入注入的都是实现类-->
<bean id="iUserInfoMapper" class="cn.spring.mapper.impl.IUserInfoMapperImpl"></bean>
<!--声明Service-->
<bean id="iUserInfoService" class="cn.spring.service.impl.IUserInfoServiceImpl">
<!--setter方法怎么注入:找到Name属性值,将属性值的开头改为大写,然后前缀加上setIUserInfoMapper-->
<property name="iUserInfoMapper" ref="iUserInfoMapper"></property>
</bean> <!--切面:增强类-->
<bean id="myAdvice" class="cn.spring.advice.MyAdvice"></bean>
<!--增加处理
切点:你要对哪一个方法进行增强 expression:切点表达式匹配的
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)
modifiers-pattern:方法的可见性,如public,protected;
ret-type-pattern:方法的返回值类型,如int,void等;
declaring-type-pattern:方法所在类的全路径名,如com.spring.Aspect;
name-pattern:方法名类型,如buisinessService();
param-pattern:方法的参数类型,如java.lang.String;
throws-pattern:方法抛出的异常类型,如java.lang.Exception;
通配符:
*通配符,该通配符主要用于匹配单个单词,或者是以某个词为前缀或后缀的单词。
..通配符,该通配符表示0个或多个项
-->
<aop:config>
<!--切点-->
<aop:pointcut id="pointcut" expression="execution(* *..service.*.*(..))"/>
<!--织入 将增强处理和切点表达式符合的方法关联到一起-->
<aop:advisor advice-ref="myAdvice" pointcut-ref="pointcut"></aop:advisor>
</aop:config>
</beans>
(10)测试类
    
(11)控制台 实现增强
    
Spring 中AOP及前后置增强案例的更多相关文章
- Spring中AOP简介与切面编程的使用
		
Spring中AOP简介与使用 什么是AOP? Aspect Oriented Programming(AOP),多译作 "面向切面编程",也就是说,对一段程序,从侧面插入,进行操 ...
 - Spring中AOP相关源码解析
		
前言 在Spring中AOP是我们使用的非常频繁的一个特性.通过AOP我们可以补足一些面向对象编程中不足或难以实现的部分. AOP 前置理论 首先在学习源码之前我们需要了解关于AOP的相关概念如切点切 ...
 - 框架源码系列十:Spring AOP(AOP的核心概念回顾、Spring中AOP的用法、Spring AOP 源码学习)
		
一.AOP的核心概念回顾 https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/core.html#a ...
 - Spring 中aop切面注解实现
		
spring中aop的注解实现方式简单实例 上篇中我们讲到spring的xml实现,这里我们讲讲使用注解如何实现aop呢.前面已经讲过aop的简单理解了,这里就不在赘述了. 注解方式实现aop我们 ...
 - AOP 与 Spring中AOP使用(上)
		
AOP简介 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP是OOP的延续 ...
 - 浅析Spring中AOP的实现原理——动态代理
		
一.前言 最近在复习Spring的相关内容,刚刚大致研究了一下Spring中,AOP的实现原理.这篇博客就来简单地聊一聊Spring的AOP是如何实现的,并通过一个简单的测试用例来验证一下.废话不 ...
 - Spring中AOP相关的API及源码解析
		
Spring中AOP相关的API及源码解析 本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring ...
 - Spring中AOP原理,源码学习笔记
		
一.AOP(面向切面编程):通过预编译和运行期动态代理的方式在不改变代码的情况下给程序动态的添加一些功能.利用AOP可以对应用程序的各个部分进行隔离,在Spring中AOP主要用来分离业务逻辑和系统级 ...
 - JAVA高级架构师基础功:Spring中AOP的两种代理方式:动态代理和CGLIB详解
		
在spring框架中使用了两种代理方式: 1.JDK自带的动态代理. 2.Spring框架自己提供的CGLIB的方式. 这两种也是Spring框架核心AOP的基础. 在详细讲解上述提到的动态代理和CG ...
 
随机推荐
- Spring Boot与ActiveMQ整合
			
Spring Boot与ActiveMQ整合 1使用内嵌服务 (1)在pom.xml中引入ActiveMQ起步依赖 <dependency> <groupId>org.spri ...
 - crontab -e 报错(E518: Unknown option: foldenable)
			
crontab 默认编辑器为vi,不支持foldenable #crontab -e Error detected while processing /root/.vimrc: line : E518 ...
 - 在windows上用apache+mod_wsgi服务部署django项目
			
之前一直在本地跑django项目,最近尝试在服务器上部署项目,目前已经成功部署,也花了好多时间,这里跟大家交流一下,希望对像我一样的新手有帮助. 一.配置环境: 1.Python版本3.7 2.服务器 ...
 - 基于V7的新版RL-USB和RL-FlashFS的NAND完整解决方案,实现更简单,用户仅需初始化FMC
			
说明: 1.新版方案更加好用,不管用户使用的那家NAND,用户要做的仅仅是初始化FMC,其它读写API,擦写均衡,坏块管理,ECC校验和掉电保护都不用操心了. 2.新版RL-USB相比老版本功能强劲了 ...
 - IT兄弟连 HTML5教程 HTML5文字版面和编辑标签 HTML基础标签
			
指引 网页中的信息主要是以文本为主的,可以通过字体.大小.颜色.底纹.边框等来设置文本的属性.文字版面的编辑包括文本标签和格式标签两种,在浏览器中显示的文字内容和格式都要在<body>标记 ...
 - 【转载】【PAT】PAT甲级题型分类整理
			
最短路径 Emergency (25)-PAT甲级真题(Dijkstra算法) Public Bike Management (30)-PAT甲级真题(Dijkstra + DFS) Travel P ...
 - Slickflow.NET 开源工作流引擎快速入门之一: 简单序列流程代码编写示例
			
前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试.本文试图从一个最简单的流程来示例说明,如何快速了解引擎代码的编写. 版本: .NETCore 2.1 ...
 - js调用网络摄像头
			
不支持IE浏览器(需要使用flash插件), 支持移动端, 未经过完全测试 PC端使用的时候, HTML页面需要预留video标签, canvas标签 移动端使用的时候, HTML页面需要预留file ...
 - echarts 饼图 + 全屏显示
			
效果图: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
 - 记录:c#实现微信,支付宝扫码支付(一)
			
因为公司系统业务需要,这几天了解了一下微信和支付宝扫码支付的接口,并用c#实现了微信和支付宝扫码支付的功能. 微信支付分为6种支付模式:1.付款码支付,2.native支付,3.jsapi支付,4.a ...