第一步:接入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演示相关推荐

  1. Spring整合Redis做数据缓存(Windows环境)

    当我们一个项目的数据量很大的时候,就需要做一些缓存机制来减轻数据库的压力,提升应用程序的性能,对于java项目来说,最常用的缓存组件有Redis.Ehcache和Memcached. Ehcache是 ...

  2. Spring整合MyBatis做 student crud

    把mybatis框架和spring集成在一起,向一个框架一样使用. 用的技术是:ioc . 为什么ioc:能把mybatis和spring集成在一起,像一个框架, 是因为ioc能创建对象. 可以把my ...

  3. 2.SSM之Spring整合、AOP及Spring事务

    1.Spring整合 1.1 Mybatis 步骤一:数据库表准备 Mybatis是来操作数据库表,所以先创建一个数据库及表 CREATE DATABASE spring_db CHARACTER S ...

  4. spring整合使用activemq

    activemq简单的demo这里就不做演示了,今天介绍一下如何利用spring整合activemq,也是实际工作中涉及到的,希望对各位伙伴有所帮助, 1.安装activemq,为演示方便,我已经提前 ...

  5. Spring整合SequoiaDB SQL

    2019独角兽企业重金招聘Python工程师标准>>> 1.背景 Spring在J2EE应用程序开发框架中占据重要的作用,它实现了轻量级的IoC(控制反转)和AOP(面向切面)容器框 ...

  6. Strutsw2与Spring整合流程-简述

    1.      新建WEB工程: 2.      导入struts2开发包,和资源配置文件 ① globalMessages.properties ② struts.properties 3.     ...

  7. 【spring框架】spring整合hibernate初步

    spring与hibernate做整合的时候,首先我们要获得sessionFactory. 我们一般只需要操作一个sessionFactory,也就是一个"单例",这一点很适合交给 ...

  8. (转)Spring使用AspectJ进行AOP的开发:注解方式

    http://blog.csdn.net/yerenyuan_pku/article/details/69790950 Spring使用AspectJ进行AOP的开发:注解方式 之前我已讲过Sprin ...

  9. 网站性能优化小结和spring整合redis

    现在越来越多的地方需要非关系型数据库了,最近网站优化,当然从页面到服务器做了相应的优化后,通过在线网站测试工具与之前没优化对比,发现有显著提升. 服务器优化目前主要优化tomcat,在tomcat目录 ...

最新文章

  1. python下载图片
  2. 常识:佛前三炷香是什么意思
  3. C++基础:各种输入方法总结
  4. mac下 如果docker 如果访问不到网 就下载哥docker-machine 然后进入到vbox下进行操作
  5. 计算机硬件基础-存取方式
  6. win7系统0x0000001a蓝屏代码怎么办
  7. 中fifo算法_java线程池,工作窃取算法
  8. 开源软件的中年危机如何破解?
  9. JavaScript中prompt的使用
  10. 【深拷贝VS浅拷贝】------【巷子】
  11. 微信小程序开发 -- 获取当前页面路径
  12. 批量生成ip地址shell脚本
  13. Jmeter接口响应Json格式校验:Json Schema
  14. android 截屏源码分析,android 截图功能源码解析
  15. 计算机网络中属于资源子网的是,属于计算机网络的资源子网
  16. excel文件被写保护怎么解除_实用解除常用文件word、excel的写保护
  17. 2017-2018 年终总结
  18. Xamarin 设置ListView组头的高度
  19. 【数据结构篇03】栈和队列
  20. K2P padavan固件下宽带与IPTV融合

热门文章

  1. QQ登录提示:登录超时,请检查您的网络或者本机防火墙设置(错误码:0x00000001)
  2. DHT21程序,DHT21与DHT11的不同处
  3. ctr多少正常_亚马逊ctr多少算正常?
  4. c语言非布拉数前20个,C语言数据类型转换
  5. OpenCV如何叠加大小不同的图片
  6. Nubia Z18 联通VoLte修复,基带文件
  7. OverNet-250FPS SISR实时算法- | Lightweight Multi-Scale Super-Resolution with Overscaling Network
  8. Multisim 设计任务
  9. SpringBoot 中的验证码、二维码、缩略图、图片上传、定时器调度
  10. debugger在js中是什么