ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringAOP实验

2021-12-03 23:35:42  阅读:186  来源: 互联网

标签:String int 实验 result edu SpringAOP import public


目录结构

代码

java

package cn.edu.sdau.aop;

public interface ArithmeticCalculator {
    public int add(int i, int j);
    public int sub(int i, int j);
    public int mul(int i, int j);
    public int div(int i, int j);
}



package cn.edu.sdau.aop;

public class ArithmeticCalculatorImpl implements ArithmeticCalculator {

    @Override
    public int add(int i, int j) {
        int result = i + j;
        return result;
    }

    @Override
    public int sub(int i, int j) {
        int result = i - j;
        return result;
    }

    @Override
    public int mul(int i, int j) {
        int result = i * j;
        return result;
    }

    @Override
    public int div(int i, int j) {
        int result = i / j;
        return result;
    }

}




package cn.edu.sdau.aop;

import org.aspectj.lang.JoinPoint;

import java.util.Arrays;

public class LoggingAspect {
    public void beforeMethod(JoinPoint joinPoint){
        String methodName = joinPoint.getSignature().getName();
        Object [] args = joinPoint.getArgs();
        System.out.println("The method " + methodName + " begins with " + Arrays.asList(args));

    }

    public void afterMethod(JoinPoint joinPoint){
        String methodName = joinPoint.getSignature().getName();
        System.out.println("The method " + methodName + " ends");

    }

}





package cn.edu.sdau.aop;

import org.aspectj.lang.JoinPoint;

import java.util.Arrays;

public class VlidationAspect {

    public void validateArgs(JoinPoint joinPoint){
        String methodName = joinPoint.getSignature().getName();
        //取得参数.
        Object [] args = joinPoint.getArgs();
        System.out.println("-->validate:" + Arrays.asList(args));
        if (args != null && args.length > 0) {
            for(int i=0;i<args.length;++i){
                if(((Integer)args[i]).intValue()<0){
                    System.out.println("警告:方法"+methodName+"()第"+i+"参数为负数:" +args[i]);
                }
            }
        }
    }
}



配置(applicationContext_xml)

<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">

    <bean id="abcd" class="cn.edu.sdau.aop.ArithmeticCalculatorImpl"></bean>

    <!-- 配置切面类的一个bean -->
    <bean id="logging" class="cn.edu.sdau.aop.LoggingAspect"></bean>
    <bean id="xyz" class="cn.edu.sdau.aop.VlidationAspect"></bean>
    <!-- 配置 AOP -->
    <aop:config>
        <!-- 配置切面及通知 -->
        <aop:aspect ref="logging" order="2">
            <aop:before method="beforeMethod"
                        pointcut="execution(* cn.edu.sdau.aop.ArithmeticCalculator.*(..))" />
            <aop:after method="afterMethod"
                       pointcut="execution(* cn.edu.sdau.aop.ArithmeticCalculator.*(..))" />
        </aop:aspect>

        <!-- 配置第2个切面及通知 -->
        <aop:aspect ref="xyz" order="1">
            <aop:before method="validateArgs"
                        pointcut="execution(* cn.edu.sdau.aop.ArithmeticCalculator.*(..))" />
        </aop:aspect>
    </aop:config>
</beans>

运行App

package cn.edu.sdau;

/**
 * Hello world!
 *
 */
import cn.edu.sdau.aop.ArithmeticCalculator;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {	
	public static void main(String[] args) {		

		//(1)创建IoC容器
		ApplicationContext ctx1 = new ClassPathXmlApplicationContext("applicationContext_xml.xml");
		//(2)从容器IoC中获取对象(在类中已经采用注释)
		ArithmeticCalculator ac = (ArithmeticCalculator) ctx1.getBean("abcd");
		//(3)使用对象
		int result = ac.add(10, 20);
		System.out.println("result:" + result);
		result = ac.div(-21, 3);
		System.out.println("result:" + result);
	}

	
}

aop示例

java

package cn.edu.sdau;

public class A {
	private String a1;
	private String a2;
	
	public void mA1(){
		System.out.println("我是A类的方法mA1(),被运行!");
		for(int i = 0; i < 100000000; i++);		
	}
	public void mA2(){
		System.out.println("我是A类的方法mA2(),被运行!");
		for(int i = 0; i < 100000000; i++);
	}	
	public A() {}
	public A(String a1, String a2) {		
		this.a1 = a1;
		this.a2 = a2;
	}
	public String getA1() {
		return a1;
	}
	public void setA1(String a1) {
		this.a1 = a1;
	}
	public String getA2() {
		return a2;
	}
	public void setA2(String a2) {
		this.a2 = a2;
	}
}





package cn.edu.sdau;

public class B {
	private String b1;
	private String b2;
	public void mB1(){
		System.out.println("我是B类的方法mB1(),被运行!");
		double i=0;
		while(i<10e+8){
			i=i+1;
		}
		//for(long i = 0; i <300000000; i++);
	}
	public void mB2(){
		System.out.println("我是B类的方法mB2(),被运行!");
		double i=0;
		while(i<10e+8){
			i=i+1;
		}
		//for(int i = 0; i < 250000000; i++);
	}	
	
	public B() {}
	public B(String b1, String b2) {	
		this.b1 = b1;
		this.b2 = b2;
	}
	public String getB1() {
		return b1;
	}
	public void setB1(String b1) {
		this.b1 = b1;
	}
	public String getB2() {
		return b2;
	}
	public void setB2(String b2) {
		this.b2 = b2;
	}
}





package cn.edu.sdau;
public class C {
	private String c1;
	private String c2;
	public void mC1(){
		System.out.println("我是C类的方法mC1(),被运行!");
		for(int i = 0; i < 300000000; i++);
	}
	public void mC2(){
		System.out.println("我是C类的方法mC2(),被运行!");
		for(int i = 0; i < 300000000; i++);
	}
	
	public C() {}
	public C(String c1, String c2) {		
		this.c1 = c1;
		this.c2 = c2;
	}
	public String getC1() {
		return c1;
	}
	public void setC1(String c1) {
		this.c1 = c1;
	}
	public String getC2() {
		return c2;
	}
	public void setC2(String c2) {
		this.c2 = c2;
	}
}




package cn.edu.sdau;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import org.aspectj.lang.JoinPoint;

public class X {
	public void mX1(JoinPoint joinPoint) {
		// 连接点对象做参数,利用该参数,获取目标对象的方法
		String methodName = joinPoint.getSignature().getName();
		String className = joinPoint.getTarget().getClass().getSimpleName();
		System.out.println("我是前置通知,在"+className+"类方法:" + methodName + "()运行前被切入!");
		// 获取当前系统的时间,并转换为yyyy年MM月dd日 HH:mm:ss格式,并显示
		Calendar startTimeNow = Calendar.getInstance();
		SimpleDateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
		String startTime = fmt.format(startTimeNow.getTime());
		System.out.println(className+"类方法:" + methodName + "(),运行开始时间:" + startTime);
	}

	public void mX2(JoinPoint joinPoint) {
		// 连接点对象做参数,利用该参数,获取目标对象的方法
		String methodName = joinPoint.getSignature().getName();
		String className = joinPoint.getTarget().getClass().getSimpleName();
		System.out.println("我是后置通知,在"+className+"类方法:" + methodName + "()运行前被切入!");
		// 获取当前系统的时间,并转换为yyyy年MM月dd日 HH:mm:ss格式,并显示
		Calendar endTimeNow = Calendar.getInstance();
		SimpleDateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
		String endTime = fmt.format(endTimeNow.getTime());
		System.out.println(className+"类方法:" + methodName + "(),运行结束时间:" + endTime);
	}

}



配置(spring.xml)

<?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.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">

	<!-- 配置 bean -->
	<bean id="a" class="cn.edu.sdau.A"></bean>
	<bean id="b" class="cn.edu.sdau.B"></bean>
	<bean id="c" class="cn.edu.sdau.C"></bean>
	<bean id="x" class="cn.edu.sdau.X"></bean>
	
	
	<!-- 配置 AOP -->
	<aop:config>		
		<!-- 配置切面及通知 -->
		<aop:aspect ref="x">
			<aop:before method="mX1" 
                             pointcut="execution(* cn.edu.sdau.*.*())"/>
			<aop:after method="mX2" 
                            pointcut="execution(* cn.edu.sdau.*.*())"/>	
    	</aop:aspect>			
	</aop:config>
	
</beans>

运行

package cn.edu.sdau;

/**
 * Hello world!
 *
 */
import cn.edu.sdau.aop.ArithmeticCalculator;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {	
	public static void main(String[] args) {		
		//(1)创建IoC容器
		ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
		//(2)从容器IoC中获取对象
		A a = (A) ctx.getBean("a");
		B b = (B) ctx.getBean("b");
		C c = (C) ctx.getBean("c");
		//(3)使用对象
		a.mA1();
		b.mB2();
		a.mA2();
		b.mB1();
		c.mC1();

	}
	
}

标签:String,int,实验,result,edu,SpringAOP,import,public
来源: https://www.cnblogs.com/dss-99/p/15640562.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有