05-Spring的AOP编程之基于注解开发
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编程之基于注解开发的更多相关文章
- Spring基于注解开发异常
基于注解开发: 一开始:用的jar包: 百度查到: 导入aop包: 没用 有的说: Spring版本和jdk版本不匹配 于是我换成了4.0版本 导入的jar包: 还是报错. 解决办法:添加spring ...
- Spring IoC 源码分析 (基于注解) 之 包扫描
在上篇文章Spring IoC 源码分析 (基于注解) 一我们分析到,我们通过AnnotationConfigApplicationContext类传入一个包路径启动Spring之后,会首先初始化包扫 ...
- Java基础-SSM之Spring的AOP编程
Java基础-SSM之Spring的AOP编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Spring的本质说白了就是动态代理,接下来我们会体验AOP的用法.它是对OOP的 ...
- Hystrix 基于注解开发
不对地方,请指出!相互学习! 背景:Hystrix 没有无参构造函数,所以Spring管理bean时候没办法进行管理, 每个类都进行编码 个人感觉不方便,基于注解开发!方便速度快,不侵入代码!引入的j ...
- 8 -- 深入使用Spring -- 4...5 AOP代理:基于注解的“零配置”方式
8.4.5 基于注解的“零配置”方式 AspectJ允许使用注解定义切面.切入点和增强处理,而Spring框架则可识别并根据这些注解来生成AOP代理.Spring只是使用了和AspectJ 5 一样的 ...
- 使用Spring框架入门四:基于注解的方式的AOP的使用
一.简述 前面讲了基于XML配置的方式实现AOP,本文简单讲讲基于注解的方式实现. 基于注解的方式实现前,要先在xml配置中通过配置aop:aspectj-autoproxy来启用注解方式注入. &l ...
- Spring基于注解开发的注解使用之AOP(部分源代码分析)
AOP底层实现动态代理 1.导入spring-aop包依赖 <!--aopV1--> <dependency> <groupId>org.springframewo ...
- Spring框架--AOP编程
2 手动实现AOP编程 AOP 面向切面的编程, AOP可以实现"业务代码"与"关注点代码"分离 // 保存一个用户 public void add(User ...
- Spring之AOP编程
一.AOP简介 AOP的英文全称是Aspect Oriented Programming,意为:面向切面编程. AOP采取横向抽取的机制,取代了传统纵向继承体系的代码复用.AOP常用于 ...
- Spring的AOP编程
1.手动实现AOP编程(代理模式) AOP是面向切面的编程,主要功能就是实现"业务代码"和辅助业务代码的"关注点代码"分离.在一个方法中,出了核心的业务代码,其 ...
随机推荐
- 牛客 二叉树中和为某一值的路径 【时间19ms】【内存9560k】
https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca 构造函数:new ArrayList(al)把al的所有值复制到 ...
- window.onerror的总结
// a.js window.onerror = function (message, url, line, column, error) { console.log('log---onerror:: ...
- maven-标准目录结构,常用命令,生命周期,概念模型图
maven-标准目录结构 作为一个maven工程,它的src目录和pom.xml是必备的,进入src目录后,我们发现它里面的目录结构如下: src/main/java -- 存放项目的 . java ...
- js实现网页自动跳转到手机页面
网站既包含PC端页面,又包括手机端页面时,打开手机端自动跳转手机页面,js代码如下 <script type="text/javascript"> var mobile ...
- RMAN架构
关于 RMAN 环境 Recovery Manager 环境由在备份和恢复策略中发挥作用的各种应用程序和数据库组成. RMAN 环境的组件 组件 描述 RMAN 客户端 管理目标数据库的备份和恢复操作 ...
- fork子进程父进程死掉之后,getppid()不为1的解决办法
代码例子:程序在执行之后,会一直死在while中,打印发现当父进程被终止,getppid() 的值也不为1 pid_t pid;if((pid = fork()) < 0){ printf(&q ...
- 做好ssh远程访问安全
传统都是这样的: 1. 只允许跳板机登录2. 跳板机要用 vpn 登录 修改默认端口+fail2ban+ssh 密钥对 0. 保护好自己干活用的桌面机是一切安全的根本.1. 及时更新 /自动更新意义很 ...
- 开始学习Linux
1.路径: 绝对路径: 从根目录开始描述; 相对路径: 从当前位置开始描述的路径; . 当前目录 .. 上级目录 ~/ <===> /home/acs 家目录 ...
- ssh scp 相关
1. 设置ssh 的免密登录 1> 将 ~/.ssh/id_rsa.pub文件中的内容拷贝到 远程host的 ~/.ssh/authorized_keys文件中 2> ssh-copy-i ...
- infoq上看视频1(持续更新)
打破工程师思维 http://www.infoq.com/cn/presentations/break-engineer-thinking 百姓网人: 从技术走向产品的那点儿事 http://www. ...