AOP功能测试

作者: 超速蜗牛1984 | 来源:发表于2019-08-26 16:44 被阅读0次

简单解释下AOP

能在程序运行期间,能动态的将某段代码切入到指定的位置进行运行的编程方式

测试过程

 *  1、模块导入spring-aspects
 *  2、定义一个业务逻辑类MathCalculator,在业务逻辑运行的时候,将日志进行打印
 *  3、定义一个日志切面类:LogAspect,需要感知MathCalculator运行到哪里,并进行执行
 *       通知方法:
 *            前置通知(@Before):logStart
 *            后置通知(@After):logEnd
 *            返回通知(@AfterReturning):logReturn
 *            异常通知(@AfterThrowing):logException
 *            环绕通知(@Around):动态代理,手动推进目标方法的运行(joinPoint.procced())
 *  4、给切面类的目标方法标注何时何地运行
 *  5、将切面类和业务逻辑类都加入到容器中
 *  6、告诉Spring,哪个类是切面类(给切面类上家一个注解)
 *  7、需要给配置类加上@EnableAspectJAutoProxy,表示【开启基于注解的AOP模式】
 *     在spring中有很多的Enable开头的注解,都是开启某个基于注解的功能

逻辑类

/**
 * @author huangxiaoting
 * @date 2019/8/26 15:24
 */
public class MathCalculator {
    public int div(int i,int j){
        return i/j;
    }
}

切面类

/**
 * @author huangxiaoting
 * @date 2019/8/26 15:27
 */
//目的是告诉spring,这是一个切面类
@Aspect
public class LogAspect {
    @Pointcut("execution(public int com.dwd.snail.testspring.test.aop.MathCalculator.*(..))")
    public void pointCut(){

    }
    @Before("pointCut()")
    //JoinPoint一定要出现在参数比表的第一位
    public void logStart(JoinPoint joinPoint){
        Object[] args = joinPoint.getArgs();
        System.out.println(""+ joinPoint.getSignature().getName()+"运行。。。参数列表是:{"+ Arrays.asList(args) +"}");
    }
    @After("com.dwd.snail.testspring.test.aop.LogAspect.pointCut()")
    public void logEnd(JoinPoint joinPoint){
        System.out.println(""+ joinPoint.getSignature().getName()+"除法结束。。。");
    }
    @AfterReturning(value = "pointCut()",returning = "result")
    public void logReturn(Object result){
        System.out.println("除法正常返回。。。计算结果是:{"+result+"}");
    }
    @AfterThrowing(value ="pointCut()",throwing = "exception")
    public void logException(Exception exception){
        System.out.println("除法异常。。。异常信息是:{"+exception+"}");
    }
}

配置类

@EnableAspectJAutoProxy
@Configuration
public class MainConfigOfAOP {
    //业务逻辑类加入到容器中
    @Bean
    public MathCalculator mathCalculator(){
        return  new MathCalculator();
    }
    //切面类也加入到容器中
    @Bean
    public LogAspect logAspect(){
        return new LogAspect();
    }
}

测试类

public class IocTest_Aop {
    AnnotationConfigApplicationContext applicationContext=new AnnotationConfigApplicationContext(MainConfigOfAOP.class);
    @Test
    public void test01(){
//        printBeans(applicationContext);
//        applicationContext.close();
        MathCalculator mathCalculator = applicationContext.getBean(MathCalculator.class);
        mathCalculator.div(1,1);
        //这种方式是是普通的new一个实例对象,并没有交给spring容器管理,所以切面的功能也不会渗透进去
//        MathCalculator mathCalculator2=new MathCalculator();
//        mathCalculator2.div(1,2);


    }

//    private void printBeans(AnnotationConfigApplicationContext applicationContext){
//        String[] names=applicationContext.getBeanDefinitionNames();
//        for (String name:names){
//            System.out.println(name);
//            System.out.println(applicationContext.getBean(name));
//        }
//    }
}

正常的结果展示

div运行。。。参数列表是:{[1, 1]}
div除法结束。。。
除法正常返回。。。计算结果是:{1}

异常的结果展示

div运行。。。参数列表是:{[1, 0]}
div除法结束。。。
除法异常。。。异常信息是:{java.lang.ArithmeticException: / by zero}

相关文章

  • AOP功能测试

    简单解释下AOP 能在程序运行期间,能动态的将某段代码切入到指定的位置进行运行的编程方式 测试过程 逻辑类 切面类...

  • 《Spring(5.x)注解驱动开发》aop(三)

    20.AOP原理总结 利用@EnableAspectJAutoProxy开启AOP功能。 @EnableAspec...

  • 每日一结——Spring AOP

    AOP简介 AOP将业务模块与周边功能或者说为业务模块服务的功能区分开,例如:权限控制、日志统计。AOP将这些共性...

  • Spring AOP源码解析

    0.AOP整体流程 1)@EnableAspectJAutoProxy 开启AOP功能2)@EnableAspec...

  • AOP

    简介 AOP即面向切面编程纵向关系OOP与横向切面AOP对比AOP的实现AOP的优缺点AOP的目标是把这些功能集中...

  • 第12章-Spring基于注解配置AOP

    Spring 的 AOP 功能是基于 AspectJ 实现的,支持使用注解声明式定义 AOP 切面。 理解 AOP...

  • 拦截器

    struts框架内部请求-响应过程: aop 面向切面编程 aop特点: 可以动态的增减功能,不需要改变其他功能 ...

  • AOP 埋点

    一、简介AOP AOP: Aspect Oriented Programming 面向切面编程。 主要的功能是:日...

  • AOP原理总结

    AOP原理总结: 1) @EnableAspectJAutoProxy 利用这个注解开启AOP功能 2) @Ena...

  • SpringBoot整合AOP

    SpringBoot整合AOP AOP简介 最核心的两个功能就是AOP(面向切面)和IOC(控制反转)。Sprin...

网友评论

    本文标题:AOP功能测试

    本文链接:https://www.haomeiwen.com/subject/reddectx.html