spring AOP的两种配置
- xml配置
- 定义要被代理的方法的接口
public interface TestAop {
public void print(String s);
}
- 实现上述接口
public class TestAopImp implements TestAop{
public void print(String s) {
System.out.println("具体业务逻辑");
}
}
- 定义切面(要在被代理方法的前后进行的操作)
public class LogUtil {
public void logbefore(JoinPoint joinPoint) { //joinPoint为代理的方法
System.out.println("业务处理之前记录日志");
}
public void logAfter(JoinPoint joinPoint) {
System.out.println("业务处理之后记录日志");
}
// @Around("print()")
// public void doAround(ProceedingJoinPoint pjp) throws Throwable {
// System.out.println("开始处理业务");
//// pjp.proceed();
// System.out.println("处理业务结束");
// }
//在处理的过程中发生异常
public void doAfterThrowing(Exception e) {
System.out.println("例外通知:" + e);
}
public void doAfterReturning(Object result) {
System.out.println("后置通知:" + result);
}
}
- xml文件中配置
<bean id="testAop" class="AOP.TestAopImp"/>
<bean id="LogUtil" class="AOP.LogUtil"/>
<aop:config>
<aop:aspect id="aspect" ref="LogUtil">
<aop:pointcut id="PointtestAop" expression="execution(* AOP.TestAopImp.print*(..))"/>
<aop:before method="logbefore" pointcut-ref="PointtestAop"/>
<aop:after method="logAfter" pointcut-ref="PointtestAop"/>
<!--<aop:around method="doAround" pointcut-ref="PointtestAop"/>-->
<aop:after-returning method="doAfterReturning" pointcut-ref="PointtestAop" returning="result"/>
<aop:after-throwing method="doAfterThrowing" throwing="e" pointcut-ref="PointtestAop"/>
</aop:aspect>
</aop:config>
2.注解配置
- 开启注解 在xml配置文件中加上<aop:aspectj-autoproxy/>
- 导包(不导包用不了注解)
<dependency>
<groupId>aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
- 接口和实现类和xml配置相同,接下来定义切面
@Aspect
public class LogUtil {
@Pointcut("execution(* AOP.TestAopImp.print(String))")
public void print() {
} @Before("print()")
public void logbefore(JoinPoint joinPoint) { //joinPoint为代理的方法
System.out.println("业务处理之前记录日志");
} @After("print()")
public void logAfter(JoinPoint joinPoint) {
System.out.println("业务处理之后记录日志");
} // @Around("print()")
// public void doAround(ProceedingJoinPoint pjp) throws Throwable {
// System.out.println("开始处理业务");
//// pjp.proceed();
// System.out.println("处理业务结束");
// } //在处理的过程中发生异常
@AfterThrowing(pointcut = "print()", throwing = "e")
public void doAfterThrowing(Exception e) {
System.out.println("例外通知:" + e);
} @AfterReturning(pointcut = "print()", returning = "result")
public void doAfterReturning(Object result) {
System.out.println("后置通知:" + result);
}
****************注意点****************
- around切点等于before切点加上after切点,使用的时候二者选其一 pjp.proceed()就等于执行被代理的函数
- 对于几个切点的执行顺序:
try
{
// 执行前置通知;
// 执行目标方法;
// 执行返回通知;
}
catche(Exception e)
{
// 执行异常通知;
}
finally
{
// 执行后置通知;
}
spring AOP的两种配置的更多相关文章
- (一)spring aop的两种配置方式。
sring aop的方式有两种:(1)xml文件配置方式(2)注解的方式实现,我们可以先通过一个demo认识spring aop的实现,然后再对其进行详细的解释. 一.基于注解的springAop配置 ...
- spring AOP的两种配置方式
连接点(JoinPoint) ,就是spring允许你是通知(Advice)的地方,那可就真多了,基本每个方法的前.后(两者都有也行),或抛出异常是时都可以是连接点,spring只支持方法连接点.其他 ...
- spring AOP的两种代理
本篇记录下spring AOP的两种代理,为下一篇AOP实现做下铺垫. 1.JDK动态代理 2.cglib代理 1.如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP2.如果目标对象 ...
- 使用aspectJ实现Spring AOP的两种方式
方式一:基于aspectJ的XML配置 方式二:基于aspectJ的注解方式 基于aspectJ的XML配置 1) 引入相关jar包 2) 创建Spring核心配置文件,必须导 ...
- spring aop的两种写法aspect和advisor
本文转自:https://www.cnblogs.com/leiOOlei/p/3709607.html 首先看个例子,如下 接口代码: package com.lei.demo.aop.schema ...
- spring ----> aop的两种实现方式
实现1:基于xml package com.rr.spring3.interf; //接口 public interface SayHello { public void sayHello(); } ...
- 学习JavaWeb aop两种配置方式
aop aop:面向切面编程,它可以解决重复代码. aop有两种方式: 一..xml方式 1.在springmvc-servlet.xml中配置aop,应用bean文件: <!--aop配置-- ...
- springmvc配置AOP的两种方式
spingmvc配置AOP有两种方式,一种是利用注解的方式配置,另一种是XML配置实现. 应用注解的方式配置: 先在maven中引入AOP用到的依赖 <dependency> <gr ...
- 浅谈Spring的两种配置容器
浅谈Spring的两种配置容器 原文:https://www.jb51.net/article/126295.htm 更新时间:2017年10月20日 08:44:41 作者:黄小鱼ZZZ ...
随机推荐
- React 借助pubsub-js进行兄弟组件的传递值
1===> raect中两个 兄弟组件 互相通信使用的技术 使用 消息订阅(subscribe)和发布(publish)机制 s儿 伯 s rai b pʌ b lɪ ʃ 有一个库可以处理 Pu ...
- 201871010121-王方-《面向对象程序设计(java)》第十二周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/ ...
- 04-numpy-笔记-transpose
借鉴代码https://blog.csdn.net/xiongchengluo1129/article/details/79017142 吐槽一下CSDN的垃圾广告.. 这是转置,所以1维(向量)和2 ...
- [BZOJ1040][CODEVS1423][ZJOI2008]骑士
题目描述 Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略 ...
- 误删除/boot ,如何修复
进入救援模式 1.chroot /mnt/sysimage 将路径修改为 /mnt/sysimage 2.mkdir /mnt/temp mount /dev/sr0 /mnt/temp 挂载光盘 ...
- 【洛谷1829】 [国家集训队] Crash的数字表格(重拾莫比乌斯反演)
点此看题面 大致题意: 求\(\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\). 推式子 不会莫比乌斯反演的可以先去看这篇博客:初学莫比乌斯反演. 反演题显然就是推式子啊~~~ 考 ...
- [LeetCode] 633. Sum of Square Numbers 平方数之和
Given a non-negative integer c, your task is to decide whether there're two integers a and b such th ...
- Magisk —— 安卓新一代的第三方拓展,systemless模式
Magisk由宝岛台湾学生 topjohnwu 开发, XDA主贴:https://forum.xda-developers.com/apps/magisk 使用方法:第三方rec刷入zip 介绍: ...
- 推荐一款健康App 多喝水,引领全民时尚喝水生活习惯
推荐一款健康App 多喝水,引领全民时尚喝水生活习惯 1 介绍 多喝水,一款鼓励大众喝水的APP.我们倡导大众健康生活,培养人们爱喝水的习惯,让每一次喝水,都能产生价值,让人们在喝水的同时,可享受赚钱 ...
- http & https & http/2 & SPDY & WebSocket
参考文章: http https :https://www.jianshu.com/p/d286d097e56b https & ssl:https://www.jianshu.com/p/2 ...