博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring动态代理实现计算器
阅读量:5984 次
发布时间:2019-06-20

本文共 4130 字,大约阅读时间需要 13 分钟。

hot3.png

 1.ArithmeticCalculator.java

package com.huanlgiusong.spring.aop.hello;public interface ArithmeticCalculator {	int add(int i,int j);	int sub(int i,int j);	int mul(int i,int j);	int div(int i,int j);}

2.ArithmeticCalculatorImpl.java

package com.huanlgiusong.spring.aop.hello;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;	}}

3.ArithmeticCalculatorLoggingProxy.java

package com.huanlgiusong.spring.aop.hello;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.util.ArrayList;import java.util.Arrays;import org.aopalliance.intercept.Invocation;/** * 动态代理 * @author Administrator * */public class ArithmeticCalculatorLoggingProxy {	//要代理的对象	private ArithmeticCalculator target;		public ArithmeticCalculatorLoggingProxy(ArithmeticCalculator target) {		this.target=target;	}	public ArithmeticCalculator getLoggingProxy(){		ArithmeticCalculator proxy=null;		//代理对象由哪个类加载器加载		ClassLoader loader=target.getClass().getClassLoader();		//代理对象的类型 即其中那些方法		Class[]  interfaces=new Class[]{ArithmeticCalculator.class};		//当调用代理对象其中的方法时 需要执行的代码		InvocationHandler h=new InvocationHandler() {			/**			 * proxy正在返回的那个代理对象 一般情况下在invoke方法中不适用对象			 * method:正在被调用的方法			 * args:正在被调用方式时传入的参数			 */			@Override			public Object invoke(Object proxy, Method method, Object[] args)					throws Throwable {				System.out.println("invoke。。。");				//日志				System.out.println("这个方法是"+method.getName());				System.out.println("这个方法参数是:"+Arrays.asList(args));				//执行方法				Object result=method.invoke(target, args);				return result;			}		};		proxy=(ArithmeticCalculator) Proxy.newProxyInstance(loader, interfaces, h);		return proxy;	}	}

4.ArithmeticImpl.java

package com.huanlgiusong.spring.aop.hello;public class ArithmeticImpl implements ArithmeticCalculator {	@Override	public int add(int i, int j) {		System.out.println("这个方法是加法运算
<开始>
" + i + "+" + j); int result = i + j; System.out.println("这个方法是加法运算
<结束>
" + i + "+" + j + "=" + result); return result; } @Override public int sub(int i, int j) { System.out.println("这个方法是-法运算
<开始>
" + i + "+" + j); int result = i - j; System.out.println("这个方法是-法运算
<结束>
" + i + "-" + j + "=" + result); return result; } @Override public int mul(int i, int j) { System.out.println("这个方法是*法运算
<开始>
" + i + "+" + j); int result = i * j; System.out.println("这个方法是*法运算
<结束>
" + i + "*" + j + "=" + result); return result; } @Override public int div(int i, int j) { System.out.println("这个方法是/法运算
<开始>
" + i + "+" + j); int result = i / j; System.out.println("这个方法是/法运算
<结束>
" + i + "/" + j + "=" + result); return result; }}

5.TestArithmetic.java

package com.huanlgiusong.spring.aop.hello;import org.junit.Test;public class TestArithmetic {	@Test	public void test1() {		int result = 0;		ArithmeticCalculator arithmeticCalculator = null;		arithmeticCalculator = new ArithmeticCalculatorImpl();		result = arithmeticCalculator.add(1, 1);		System.out.println("result>>" + result);		result = arithmeticCalculator.sub(1, 1);		System.out.println("result>>" + result);		result = arithmeticCalculator.div(1, 1);		System.out.println("result>>" + result);		result = arithmeticCalculator.mul(1, 1);		System.out.println("result>>" + result);	}	@Test	public void test2(){		ArithmeticCalculator target=new ArithmeticCalculatorImpl();		ArithmeticCalculator proxy=new ArithmeticCalculatorLoggingProxy(target).getLoggingProxy();		int result = proxy.add(1, 2);		System.out.println("result>>" + result);		result = proxy.sub(1, 3);		System.out.println("result>>" + result);		result = proxy.div(1, 4);		System.out.println("result>>" + result);		result = proxy.mul(1, 5);		System.out.println("result>>" + result);	}}

124343_zoGB_3015803.png

 

转载于:https://my.oschina.net/liusonghuang/blog/817747

你可能感兴趣的文章
PLI 到 COBOL 的转换-数据类型 【不搞Mainframe的可能看不懂,冷门的语言】
查看>>
Tomcat学习总结(4)——基于Tomcat7、Java、WebSocket的服务器推送聊天室
查看>>
js_正则
查看>>
一些有用的技术文章
查看>>
Linux:shell登录过程
查看>>
linux 交叉编译出现的问题
查看>>
LruCache的缓存策略
查看>>
Android解析WindowManager(一)WindowManager体系
查看>>
MapReduce中的map个数
查看>>
开源框架:SDWebImage
查看>>
vue 更改数组里的数据的坑
查看>>
C++中抽象类和接口类的区别
查看>>
【中文】Joomla1.7扩展介绍之 K2(内容建设)
查看>>
Flex Label组件扩展边框与背景
查看>>
DOM相关知识总结
查看>>
类加载器、反射,反射的应用实例(泛型擦除和配置文件)
查看>>
not exists、left join/is null、not in 行为
查看>>
外企面试课程(一)---熟悉常见的缩略词
查看>>
CSS3 线性渐变linear-gradient
查看>>
第八周作业
查看>>