zoukankan      html  css  js  c++  java
  • Spring AOP

    • 切面(Aspect):切面用于组织多个Advice,Advice放在切面中定义
    • 连接点(Joinpoint):程序执行过程中明确的店,如方法的调用,或者异常的抛出。在SpringAOP中,连接点总是方法的调用
    • 增强处理(Advice):AOP框架在特定的切入点执行的增强处理。处理有“around”、“before”、“after”等类型
    • 切入点(Ponitcut):可以插入增强处理的连接点。简而言之,当某个连接点满足指定要求时,该连接点将被添加增强处理。该连接点也就变成了切入点
    • 引入:将方法或字段添加到被处理的类中
    • 目标对象:被AOP框架进行增强处理的对象。如果AOP框架采用的是动态代理AOP实现,那么该对象就是一个被代理的对象
    • AOP代理:AOP框架创建的对象,简单地说,代理就是对目标对象的加强
    • 织入:将增强处添加到目标对象中,并创建一个被增强的对象的过程就是织入

    业务类  

    public class Calculator {
        //业务逻辑方法  做除法 
        public int div(int i,int j){
            System.out.println("-------");
            return i/j;
        }
    }

    切面类 

    @Aspect
    public class LogAspects {
    
        @Pointcut("execution(public int cn.qin.aop.Calculator.*(..))")
        public void pointCut(){}
    
    
    
       // @before 表示在目标方法执行前切入,并指定在哪个方法切入
        @Before("pointCut()")
        public void logStart(JoinPoint joinPoint){
            System.out.println("除法运行....参数列表是:{"+ Arrays.asList(joinPoint.getArgs()) +"}");
        }
        @After("pointCut()")
        public void logEnd(){
            System.out.println("除法结束");
        }
        @AfterReturning(value = "pointCut()",returning ="result")
        public void logReturn(Object result){
            System.out.println("除法正常返回...运行结果是 :{"+result+"}");
        }
        @AfterThrowing(value = "pointCut()",throwing = "exception")
        public void logExcepton(Exception exception){
            System.out.println("运行异常 ...异常信息是:{"+exception+"}");
        }
    
        @Around("pointCut()")
        public Object Around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
            System.out.println("@around执行目标方法之前..");
            Object obj=proceedingJoinPoint.proceed();
            System.out.println("@around执行目标方法之后..");
            return obj;
        }
    
    }

    配置类 

      

     *
     * 日志切面类的方法需要动态感知div()方法运行
     * 通知方法:
     *      前置通知:logStart() 在我们执行div()除法之前运行 (@Before)
     *      后置通知:LogEnd() 在我们执行目标方法div运行结束之后,不管有没有异常 (@After)
     *      返回通知: LogReturn() 在我们的目标方法div正常返回值后(@AfterReturning)
     *      异常通知: LogException() 在我们的目标方法div出现异常后运行(@AfterThrowing)
     *      环绕通知: 动态代理,执行joinPoint.Procced() (其实就是执行我们的目标方法div)执行之前div()相当于前置通知,执行之后相当于后置通知 (@Around)
     *
     *
     */
    
    @Configuration
    @EnableAspectJAutoProxy
    public class MainConfig {
        @Bean
        public Calculator calculator(){
            return new Calculator();
        }
        @Bean
        public LogAspects logAspects(){
            return new LogAspects();
        }
    }

    测试 

        @Test
        public void test1(){
            AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(MainConfig.class);
            Calculator c=context.getBean(Calculator.class);
            System.out.println(c.div(3,1));
            context.close();

  • 相关阅读:
    Pycharm5注册方式
    五、监听共享目录文件
    三、python webservice
    二、Python安装扩展库
    一、Python安装下载
    test
    拖延
    要乐观对待生活
    乞讨者
    不要总是指责和埋怨
  • 原文地址:https://www.cnblogs.com/qin1993/p/11752592.html
Copyright © 2011-2022 走看看