spring整合aspects做aop演示
第一步:接入spring 和aspects依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
第二步
package demo.aop;
import java.util.Arrays;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
/*
* 创建切面类 并且注入spring容器
*/
@Aspect
@Component
public class LogAop {
//抽取公共的切入点表达式
//1、本类引用
//2、其他的切面引用
// 要拦截的方法:返回值类型 (*代表所有类型) +包名+方法名(*代表模糊匹配)+参数列表(..代表所有)
@Pointcut("execution(public * demo.controller.*Controller.*(..))")
public void pointCut(){};
@Before("pointCut()")
public void before(JoinPoint joinPoint){
String name = joinPoint.getSignature().getName();
Object[] args = joinPoint.getArgs();
System.out.println("切入点"+name+"参数:" +Arrays.asList(args));
}
@After("pointCut()")
public void after(JoinPoint joinPoint){
String name = joinPoint.getSignature().getName();
System.out.println(name+"方法执行之后@after");
}
@AfterReturning(value="pointCut()",returning="result")
public void afterReturing(JoinPoint joinPoint , Object result){
String name = joinPoint.getSignature().getName();
System.out.println("切入点"+name+"返回值" +result);
}
@AfterThrowing(value="pointCut()",throwing="ex")
public void afterThrowing(JoinPoint joinPoint,Exception ex){
String name = joinPoint.getSignature().getName();
System.out.println("切入点"+name+"异常:" +ex);
}
}
第三步:
package demo.controller;
import org.springframework.stereotype.Controller;
/*
* 创建切入点 就是被环绕的方法
*/
@Controller
public class TestController {
public int div(int a ,int b ){
System.out.println(a/b);
return a/b;
}
}
第四步 test:
package demo.elsed;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import demo.controller.TestController;
import demo.controller.UserController;
/*
* 程序入口
*/
@Configuration
@ComponentScan(value="demo")
//开启aspect动态代理
@EnableAspectJAutoProxy
public class App {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(App.class);
public void testAop(){
TestController bean = applicationContext.getBean(TestController.class);
bean.div(1, 2);
UserController bean2 = applicationContext.getBean(UserController.class);
bean2.userdiv(1, 0);
}
}
--------------------------------------
console:
切入点div参数:[1, 2]
0
div方法执行之后@after
切入点div返回值0
切入点userdiv参数:[1, 0]
userdiv方法执行之后@after
切入点userdiv异常:java.lang.ArithmeticException: / by zero
spring整合aspects做aop演示相关推荐
- Spring整合Redis做数据缓存(Windows环境)
当我们一个项目的数据量很大的时候,就需要做一些缓存机制来减轻数据库的压力,提升应用程序的性能,对于java项目来说,最常用的缓存组件有Redis.Ehcache和Memcached. Ehcache是 ...
- Spring整合MyBatis做 student crud
把mybatis框架和spring集成在一起,向一个框架一样使用. 用的技术是:ioc . 为什么ioc:能把mybatis和spring集成在一起,像一个框架, 是因为ioc能创建对象. 可以把my ...
- 2.SSM之Spring整合、AOP及Spring事务
1.Spring整合 1.1 Mybatis 步骤一:数据库表准备 Mybatis是来操作数据库表,所以先创建一个数据库及表 CREATE DATABASE spring_db CHARACTER S ...
- spring整合使用activemq
activemq简单的demo这里就不做演示了,今天介绍一下如何利用spring整合activemq,也是实际工作中涉及到的,希望对各位伙伴有所帮助, 1.安装activemq,为演示方便,我已经提前 ...
- Spring整合SequoiaDB SQL
2019独角兽企业重金招聘Python工程师标准>>> 1.背景 Spring在J2EE应用程序开发框架中占据重要的作用,它实现了轻量级的IoC(控制反转)和AOP(面向切面)容器框 ...
- Strutsw2与Spring整合流程-简述
1. 新建WEB工程: 2. 导入struts2开发包,和资源配置文件 ① globalMessages.properties ② struts.properties 3. ...
- 【spring框架】spring整合hibernate初步
spring与hibernate做整合的时候,首先我们要获得sessionFactory. 我们一般只需要操作一个sessionFactory,也就是一个"单例",这一点很适合交给 ...
- (转)Spring使用AspectJ进行AOP的开发:注解方式
http://blog.csdn.net/yerenyuan_pku/article/details/69790950 Spring使用AspectJ进行AOP的开发:注解方式 之前我已讲过Sprin ...
- 网站性能优化小结和spring整合redis
现在越来越多的地方需要非关系型数据库了,最近网站优化,当然从页面到服务器做了相应的优化后,通过在线网站测试工具与之前没优化对比,发现有显著提升. 服务器优化目前主要优化tomcat,在tomcat目录 ...
最新文章
- python下载图片
- 常识:佛前三炷香是什么意思
- C++基础:各种输入方法总结
- mac下 如果docker 如果访问不到网 就下载哥docker-machine 然后进入到vbox下进行操作
- 计算机硬件基础-存取方式
- win7系统0x0000001a蓝屏代码怎么办
- 中fifo算法_java线程池,工作窃取算法
- 开源软件的中年危机如何破解?
- JavaScript中prompt的使用
- 【深拷贝VS浅拷贝】------【巷子】
- 微信小程序开发 -- 获取当前页面路径
- 批量生成ip地址shell脚本
- Jmeter接口响应Json格式校验:Json Schema
- android 截屏源码分析,android 截图功能源码解析
- 计算机网络中属于资源子网的是,属于计算机网络的资源子网
- excel文件被写保护怎么解除_实用解除常用文件word、excel的写保护
- 2017-2018 年终总结
- Xamarin 设置ListView组头的高度
- 【数据结构篇03】栈和队列
- K2P padavan固件下宽带与IPTV融合
热门文章
- QQ登录提示:登录超时,请检查您的网络或者本机防火墙设置(错误码:0x00000001)
- DHT21程序,DHT21与DHT11的不同处
- ctr多少正常_亚马逊ctr多少算正常?
- c语言非布拉数前20个,C语言数据类型转换
- OpenCV如何叠加大小不同的图片
- Nubia Z18 联通VoLte修复,基带文件
- OverNet-250FPS SISR实时算法- | Lightweight Multi-Scale Super-Resolution with Overscaling Network
- Multisim 设计任务
- SpringBoot 中的验证码、二维码、缩略图、图片上传、定时器调度
- debugger在js中是什么