Spring的AOP基于注解的开发

  • 首先在AOP配置文件中,开启注解的aop开发
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
  • 写注解增强类 需要加上注解@Aspect
@Component
@Aspect /*表示告诉spring当前类是切面类*/
public class MyAspect2 { @Before("execution(* com.yd.service.impl.UserServiceImpl.add(..))")
public void check(){
System.out.println("----之前校验身份");
} @AfterReturning("execution(* com.yd.service.impl.UserServiceImpl.delete(..))")
public void back(){
System.out.println("----之后增强");
} /**
* 接收原方法返回值的后置增强方法
* @param obj 切入点的返回值
*/
@AfterReturning(value = "execution(* com.yd.service.impl.UserServiceImpl.deleteReturn(..))",returning = "obj")
public void backReturn(Object obj){
System.out.println("后置接收切入点返回值:"+obj);
} /**
* 环绕增强
* @param point 连接点
* @throws Throwable
*/
@Around(value = "execution(* com.yd.service.impl.UserServiceImpl.deleteAround(..))")
public void around(ProceedingJoinPoint point) throws Throwable {
System.out.println("----之前增强");
//执行切入点的方法
point.proceed();
System.out.println("----之后增强");
} /**
* 环绕增强,接收切入点的传入的参数
* @param point
* @throws Throwable
*/
@Around("execution(* com.yd.service.impl.UserServiceImpl.update(..))")
public void aroundParam(ProceedingJoinPoint point)throws Throwable{
System.out.println("---之前增强");
//获取切入点的参数
Object[] args = point.getArgs();
point.proceed();
System.out.println("---之后增强 切入点参数1:"+args[0]+" 参数2:"+args[1]);
}
/**
* 环绕增强,接收切入点的传入的参数,切接收返回
* @param point
* @throws Throwable
*/
@Around("execution(* com.yd.service.impl.UserServiceImpl.updateReturn(..))")
public void aroundReturn(ProceedingJoinPoint point)throws Throwable{
System.out.println("---之前增强");
//获取切入点的参数
Object[] args = point.getArgs();
String str = (String)point.proceed();
System.out.println("---之后增强 切入点参数1:"+args[0]+" 参数2:"+args[1]+" 返回值:"+str);
} /**
* 切入点有异常
* @param e 异常
*/
@AfterThrowing(value = "execution(* com.yd.service.impl.UserServiceImpl.selectException(..))",throwing = "e")
public void afterCatch(Exception e){
System.out.println(e.getMessage());
System.out.println("---捕获异常");
} //@After("execution(* com.yd.service.impl.UserServiceImpl.selectException(..))")
@After("execution(* com.yd.service.impl.UserServiceImpl.selectFin(..))")
public void finallyDo(){
System.out.println("finally,总会执行...");
} }
  • 用注解时,@After与@AfterThrowing同时增强同一个异常方法时,先执行@After,再执行@AfterThrowing

    • 与xml增强最后文档中的方式二结果一致
  • 补充:强制使用Cglib的动态代理,在开启aop注解下,加上

<?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: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"> <!-- bean definitions here -->
<!--开启aop注解-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<!--强制使用Cglib的动态代理-->
<aop:aspectj-autoproxy proxy-target-class="true"/>
</beans>

05-Spring的AOP编程之基于注解开发的更多相关文章

  1. Spring基于注解开发异常

    基于注解开发: 一开始:用的jar包: 百度查到: 导入aop包: 没用 有的说: Spring版本和jdk版本不匹配 于是我换成了4.0版本 导入的jar包: 还是报错. 解决办法:添加spring ...

  2. Spring IoC 源码分析 (基于注解) 之 包扫描

    在上篇文章Spring IoC 源码分析 (基于注解) 一我们分析到,我们通过AnnotationConfigApplicationContext类传入一个包路径启动Spring之后,会首先初始化包扫 ...

  3. Java基础-SSM之Spring的AOP编程

    Java基础-SSM之Spring的AOP编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   Spring的本质说白了就是动态代理,接下来我们会体验AOP的用法.它是对OOP的 ...

  4. Hystrix 基于注解开发

    不对地方,请指出!相互学习! 背景:Hystrix 没有无参构造函数,所以Spring管理bean时候没办法进行管理, 每个类都进行编码 个人感觉不方便,基于注解开发!方便速度快,不侵入代码!引入的j ...

  5. 8 -- 深入使用Spring -- 4...5 AOP代理:基于注解的“零配置”方式

    8.4.5 基于注解的“零配置”方式 AspectJ允许使用注解定义切面.切入点和增强处理,而Spring框架则可识别并根据这些注解来生成AOP代理.Spring只是使用了和AspectJ 5 一样的 ...

  6. 使用Spring框架入门四:基于注解的方式的AOP的使用

    一.简述 前面讲了基于XML配置的方式实现AOP,本文简单讲讲基于注解的方式实现. 基于注解的方式实现前,要先在xml配置中通过配置aop:aspectj-autoproxy来启用注解方式注入. &l ...

  7. Spring基于注解开发的注解使用之AOP(部分源代码分析)

    AOP底层实现动态代理 1.导入spring-aop包依赖 <!--aopV1--> <dependency> <groupId>org.springframewo ...

  8. Spring框架--AOP编程

    2 手动实现AOP编程 AOP 面向切面的编程, AOP可以实现"业务代码"与"关注点代码"分离 // 保存一个用户 public void add(User ...

  9. Spring之AOP编程

    一.AOP简介     AOP的英文全称是Aspect Oriented Programming,意为:面向切面编程.     AOP采取横向抽取的机制,取代了传统纵向继承体系的代码复用.AOP常用于 ...

  10. Spring的AOP编程

    1.手动实现AOP编程(代理模式) AOP是面向切面的编程,主要功能就是实现"业务代码"和辅助业务代码的"关注点代码"分离.在一个方法中,出了核心的业务代码,其 ...

随机推荐

  1. 敌兵布阵 HDU - 1166 - 单点修改,区间查询:树状数组/线段树

    C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...

  2. Codensity T408 视频转码器

    Codensity T408 视频转码器   微信: orihard2014

  3. Java基础之变量与常量

    变量 定义:可以变化的量. Java是一种强类型语言,每个变量都必须声明其类型. Java变量是程序种最基本的存储单元,其要素包括变量名,变量类型和作用域. //数据类型 变量名 = 值:可以使用逗号 ...

  4. 新版 Mediasoup Windows 安装 编译

    https://vc.feiyefeihua.top/ ps:视频测试demo,服务器配置很低,加载有点慢:需要有音视频设备,不然会报错. 关于官网文档 官网文档地址 只测试了 Windows .讲的 ...

  5. 11 个Chrome骚技巧让你为所欲为

    1.曾经,在线调伪类样式困扰过你? 2.源代码快速定位到某一行 ctrl + p 3.联调接口失败时,后台老哥总管你要 response? 4.你还一层层展开 dom:Alt + Click 5.是不 ...

  6. 解决The following signatures couldn't be verified because the public key is not available: NO_PUBKEY FEEA9169307EA071 NO_PUBKEY 8B57C5C2836F4BEB

    问题 yang@k8s-master:/etc/apt/sources.list.d$ sudo apt update Get:1 https://mirrors.aliyun.com/kuberne ...

  7. JavaScript基础知识整理(变量)

    变量 ECMAScript变量有两种不同数据类型的值,分别是基本类型和引用类型,两者的不同在于基本类型值是简单的数据段,引用类型值一般指由多个值构成的对象 基本类型 基本数据类型包括5种:Undefi ...

  8. 半成品 java 身份证校验

    public static Boolean is18Card(String idCard18) { //证件省份 HashMap<String, String> aCity = new H ...

  9. Django 介绍及环境准备

    Django介绍: Django(发音:[`dʒæŋɡəʊ])是基于Python的Web框架,它是开源的,免费的. Django使构建更好的web应用程序变得更容易.更快.代码更少 django的MT ...

  10. Bug的前后台分类及定位技巧

    必备工具:Firefox debug工具 一般浏览器F12即可   如何区分页面的bug问题归属:前端or后端 前端bug主要分为3个类别:HTML,CSS,Javascript三类问题 给个最大的区 ...