zoukankan      html  css  js  c++  java
  • Spring攻略学习笔记(3.01)在Spring中启用AspectJ注解支持

    一、知识点    

           Spring支持在其AOP框架中使用AspectJ注解编写POJO aspect。但是,必须先在Spring IoC容器中启 用AspecJ注解支持。

            只需要在Bean配置文件中定义一个空的XML元素<aop:aspectj-autoproxy>就可以启用Spring IoC容器中AspectJ注解支持。然后,Spring将自动为匹配你的AspectJ aspect的 所有Bean创建代理。

            对于接口不可用或者没有用于应用程序设计中的情况,可以依靠CGLIB创建代理。为了启用 CGLIB创建代理,必须在<aop:aspectj-autoproxy>中设置 proxy-targetclass= true 属性。

    二、代码示例
            计算器接口   
    package com.codeproject.jackie.springrecipesnote.springaop;
    
    /**
     * 加减乘除
     * @author jackie
     * 
     */
    public interface ArithmeticCalculator {
    	
    	/**
    	 * 加
    	 * @param a
    	 * @param b
    	 * @return
    	 */
    	public double add(double a, double b);
    
    	/**
    	 * 减
    	 * @param a
    	 * @param b
    	 * @return
    	 */
    	public double sub(double a, double b);
    
    	/**
    	 * 乘
    	 * @param a
    	 * @param b
    	 * @return
    	 */
    	public double mul(double a, double b);
    
    	/**
    	 * 除
    	 * @param a
    	 * @param b
    	 * @return
    	 */
    	public double div(double a, double b);
    }
    package com.codeproject.jackie.springrecipesnote.springaop;
    
    /**
     * 单位转换
     * @author jackie
     * 
     */
    public interface UnitCalculator {
    	
    	/**
    	 * 千克(或公斤)转换成磅
    	 * @param kilogram
    	 * @return
    	 */
    	public double kilogramToPound(double kilogram);
    
    	/**
    	 * 千米转换成英里
    	 * @param kilometer
    	 * @return
    	 */
    	public double kilometerToMile(double kilometer);
    }
    相应的实现类
    package com.codeproject.jackie.springrecipesnote.springaop;
    
    /**
     * 加减乘除实现类
     * @author jackie
     * 
     */
    public class ArithmeticCalculatorlmpl implements ArithmeticCalculator {
    
    	public double add(double a, double b) {
    		double result = a + b;
    		System.out.println(a + " + " + b + " = " + result);
    		return result;
    	}
    
    	public double sub(double a, double b) {
    		double result = a - b;
    		System.out.println(a + " - " + b + " = " + result);
    		return result;
    	}
    
    	public double mul(double a, double b) {
    		double result = a * b;
    		System.out.println(a + " * " + b + " = " + result);
    		return result;
    	}
    
    	public double div(double a, double b) {
    		if (b == 0) {
    			throw new IllegalArgumentException("Division by zero");
    		}
    		double result = a / b;
    		System.out.println(a + " / " + b + " = " + result);
    		return result;
    	}
    }
    package com.codeproject.jackie.springrecipesnote.springaop;
    
    /**
     * 单位转换实现类
     * @author jackie
     * 
     */
    public class UnitCalculatorImpl implements UnitCalculator {
    
    	public double kilogramToPound(double kilogram) {
    		double pound = kilogram * 2.2;
    		System.out.println(kilogram + " kilogram = " + pound + " pound");
    		return pound;
    	}
    
    	public double kilometerToMile(double kilometer) {
    		double mile = kilometer * 0.62;
    		System.out.println(kilometer + " kilometer = " + mile + " mile");
    		return mile;
    	}
    }

           为了启用这个应用的AspectJ注解支持,你只要在Bean配置文件中定义一个空的XML元素<aop:aspectj-autoproxy>。而且,你必须将aop schema定义添加到<beans>根元素下。当Spring IoC容器发现Bean配置文件中的<aop:aspectj-autoproxy>元素,它将自动为匹配AspecJ aspect的Bean创建代理。

           注:如果使用Maven管理依赖,需添加以下依赖

                    <dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-aop</artifactId>
    			<version>${springframework.version}</version>
    		</dependency>
    
    		<!-- AspectJ -->
    		<dependency>
    			<groupId>org.aspectj</groupId>
    			<artifactId>aspectjrt</artifactId>
    			<version>1.7.2</version>
    		</dependency>
    		<dependency>
    			<groupId>org.aspectj</groupId>
    			<artifactId>aspectjweaver</artifactId>
    			<version>1.7.2</version>
    		</dependency>

    <?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"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">    
    	<aop:aspectj-autoproxy />
       
    	<bean id="arithmeticCalculator" class="com.codeproject.jackie.springrecipesnote.springaop.ArithmeticCalculatorlmpl" />
    	<bean id="unitCalculator" class="com.codeproject.jackie.springrecipesnote.springaop.UnitCalculatorImpl" />
    </beans>

    测试方法 
            @Test
    	public void testAop() {
    		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    		ArithmeticCalculator arithmeticCalculator = (ArithmeticCalculator)applicationContext.getBean("arithmeticCalculator");
    		arithmeticCalculator.add(1, 2);
    		arithmeticCalculator.sub(1, 2);
    		arithmeticCalculator.mul(1, 2);
    		arithmeticCalculator.div(1, 2);
    		
    		UnitCalculator unitCalculator = (UnitCalculator) applicationContext.getBean("unitCalculator");
    		unitCalculator.kilogramToPound(100);
    		unitCalculator.kilometerToMile(100);	
    	}








  • 相关阅读:
    浏览器相关,回流和重绘
    Vue相关,Vuex 通俗版教程
    关于Base64
    【1801日語听解4】第7回:4月14日
    【日語听解2】第6回:4月13日
    【日語視聴説2】第6回:4月13日
    【1701日本語新聞編集】第6回:4月10日
    【1801日語写作】第6回:4月8日
    【1801日本語新聞選読】第6回:4月7日
    【1801日語听解4】第6回:4月7日
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3049939.html
Copyright © 2011-2022 走看看