• spring aop自动代理注解配置之二


    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:aop="http://www.springframework.org/schema/aop"
            xmlns:context="http://www.springframework.org/schema/context"
            xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> 
            
            <context:component-scan base-package="com.zr.utils"></context:component-scan>
            
            <!-- <aop:aspectj-autoproxy ></aop:aspectj-autoproxy> -->
            <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
    </beans>
    package com.zr.utils;
    
    
    import org.springframework.stereotype.Component;
    
    
    @Component("comp")
    public class Calculate implements Compute{
        
        public int div(int num1,int num2){
            System.out.println("除法");
            return num1/num2;
        }
    }
    package com.zr.utils;
    
    
    
    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;
    
    
    @Aspect
    @Component("testAspect")
    public class TestAspect {
        
        @Pointcut("execution(* com.zr.utils.Calculate.*(..))")
        private void testPointcut(){}
        
        //第一个 * 代表任意修饰符及任意返回值,其中 .. 匹配任意数量的参数.
        @Before("testPointcut()")
        public void methodBefore(JoinPoint joinpoint){
            System.out.println("执行方法:"+joinpoint.getSignature().getName()+"之前"+" 参数:"+Arrays.asList(joinpoint.getArgs()));
        }
        //第一个 * 代表public修饰符下任意返回值,第一个 * 代表com.zr.utils.Calculate路径下的任意方法
        @After(value="testPointcut()")
        public void methodAfter(JoinPoint joinpoint) {
            System.out.println("执行方法:"+joinpoint.getSignature().getName()+"之后");
        }
        
        //匹配第一个参数为 int 类型的方法, .. 匹配任意数量任意类型的参数
        @AfterReturning(pointcut="testPointcut()",returning="result")
        public void methodAfterRunning(JoinPoint joinpoint,Object result){
            System.out.println("返回结果之后执行"+",返回结果:"+result);
        }
        //匹配参数类型为 int, int 类型的方法.
        @AfterThrowing(pointcut="testPointcut()",throwing="exception")
        public void methodAfterThrowing(JoinPoint joinPoint,Exception exception){
            System.out.println("异常通知, 在方法抛出异常之后执行"+",异常日志:"+exception);
        }
    }
    package com.zr.utils;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class TestAop {
        
        public static void main(String[] args) {
            
            ApplicationContext ctc = new ClassPathXmlApplicationContext("context.xml");
            
            /*Calculate calculate = (Calculate) ctc.getBean("comp");*/
            Calculate c = (Calculate) ctc.getBean("comp");
            int result = c.div(10, 2);
            
            
        }
    }
  • 相关阅读:
    new的实现原理
    call, apply, bind的内部实现原理
    redux基础第二讲——react-redux
    redux基础第一讲
    React组件的数据
    ES6中的super
    ES5和ES6中实现对象和继承的方法对比
    react组件的生命周期
    浅谈js继承的几种方法
    LeetCode 5274. Number of Ways to Stay in the Same Place After Some Steps
  • 原文地址:https://www.cnblogs.com/lantu1989/p/6295639.html
Copyright © 2020-2023  润新知