码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-01-18 10:40:10      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:port   class   new   返回值   npoi   location   类型   void   top   

<?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);
        
        
    }
}

 

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

标签:port   class   new   返回值   npoi   location   类型   void   top   

原文地址:http://www.cnblogs.com/lantu1989/p/6295639.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!