首页 > 编程语言 > 详细

spring中的Aop

时间:2019-11-19 18:58:57      阅读:69      评论:0      收藏:0      [点我收藏+]

是spring中两大核心一个是IOC,另一个就是AOP,Aop称为面向切面编程。

Aop中有几个重要概念:

  • 切面 Aspect,使用注解@Aspect
  • 切入点 pointCut, 使用注解@Pointcut
  • 通知  advice

通知advice又有几种:

  • 前置通知:before advice,使用@Before注解
  • 后置通知:after advice,使用 @After注解
  • 环绕通知: around advice,使用@Around注解
  • 正常返回:after returning advice,使用@AfterReturning注解
  • 异常通知:Throws advice,使用@AfterThrowing

接下來使用:目的,在方法的前后打印日志。

先创建一个Caluate类,里面有一个方法进行处除法计算:

@Repository
public class Caluate {

    public int divide(int x,int y){
        return x/y;
    }
}

 

先创建一个日志切面类:

@Repository
@Aspect //标记这是一个切面类
public class logAspectJ {

    /**
     * 切入点表达式
     */
    @Pointcut("execution(public int com.springAop.Caluate.*(..))")//匹配该类的所有方法
    public void pointCut(){ }

    @Before("pointCut()")
    public void logStart(){
        System.out.println("在方法开始之前执行。。。。");
    }

    @AfterReturning("pointCut()")
    public void logReturn(){
        System.out.println("在方法正常返回执行。。。。");
    }

    @After("pointCut()")
    public void logend(){
        System.out.println("在方法结束之后执行。。。。");
    }

    @AfterThrowing("pointCut()")
    public void logThrow(){
        System.out.println("方法出现异常。。。。");
    }

}

创建配置类MainAopConfig:

@Configuration
@Import({Caluate.class,logAspectJ.class})
@EnableAspectJAutoProxy
public class MainAopConfig {

}

测试:正常输出

public class AopTest {
    @Test
    public void  test(){
        //创建容器
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainAopConfig.class);
        Caluate caluate = applicationContext.getBean(Caluate.class);
        caluate.divide(2,1);
        applicationContext.close();
    }
}

打印结果:
在方法开始之前执行。。。。
在方法结束之后执行。。。。
在方法正常后执行。。。。

测试:出现异常

public class AopTest {
    @Test
    public void  test(){
        //创建容器
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainAopConfig.class);
        Caluate caluate = applicationContext.getBean(Caluate.class);
        caluate.divide(2,0);
        applicationContext.close();
    }
}

打印结果:

在方法开始之前执行。。。。
在方法结束之后执行。。。。
方法出现异常。。。。

spring中的Aop

原文:https://www.cnblogs.com/tdyang/p/11891110.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!