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. vue axios传值到后端报错问题

    原因:axios使用post方法传输数据给后端默认为json格式,会导致跨域问题 原理:qs是查询字符串解析和将对象序列化的库 qs.stringify()   将对象序列化成url的形式,以& ...

  2. 二进制k8s 集群新增加node 节点

    环境 名称 ip地址 cpu 内存 lgy-k8s-master0021 10.65.0.21 4c 8G lgy-k8s-node0012 10.65.0.12 4c 8G node节点初始化(以新 ...

  3. pgsql临时表

    with ete as ( SELECT * from table_name ) SELECT * from ete

  4. Safari浏览器如何收藏网页?

    Safari浏览器是MacOS所自带的一款功能强劲的浏览器,许多MacOS的用户在使用过Safari浏览器后就不会去下载其他浏览器了.对于很多Mac新手用户来说,如何使用Safari浏览器来收藏喜欢的 ...

  5. Dos基本命令及批处理

    如何操作DOS命令: 开始----运行----cmd----回车: win+R------运行----cmd----回车: 基本命令: 1.命令:color f0 color ?  寻求帮助 改变背景 ...

  6. Samsung Wlan AP 默认口令

    网络资产搜索: FoFa 进入页面 输入该产品账户密码   在github上面寻找 End!!!

  7. 前端vue框架上手记录

    ---恢复内容开始--- Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,提供: 通过 @vue/cli 搭建交互式的项目脚手架. 通过 @vue/cli + @vue/cli-se ...

  8. JAVA第四五次大作业及期中考试总结

         21201411-李英涵            继承与多态blog2 前言: 期中考试的题目还可以,因为给了类图,但是难度也逐渐升高. pta中的四的第一题和第三题较为简单,因为第一题的正则 ...

  9. C#访问MySQL(一):连接查询删除(查删)

    前言: 通过C#连接访问MySQL:连接查询. 1.项目添加MySQL引用: 2.获取数据库一个满足条件的值: public static object GetSingle2(string SQLSt ...

  10. 为动态二级域名申请https的免费证书.

    前面已经讲过将nginx部署,并注册了免费的二级域名.但将网址发给儿子,儿子说微信已经不能打开http的网址了,所以一想还是研究一下https的证书申请. 网上有很多讲通过,acme的脚本来自动化申请 ...