AOP代理

简介

对于使用相同功能代码段的实现方式如下:
在这里插入图片描述

图A 复制粘贴实现代码复用对于多处有相同的代码片段再后期维护、升级过程中将是噩梦。

图B吧相同代码封装成方法,在需要的地方调用即可。但是代码段2、代码段4以硬编码的方式调用相同代码。

AOP (Aspect Orient Programing,面向切面编程)代理

AOP 代理包含目标对象的所有方法,但是和目标对象方法有所差异,可以在目标对象方法前、后插入一些处理。

com.sxu.test.Test.java

package com.sxt.test;

 
import java.lang.reflect.*;

import com.sxt.test.Test.Testable;



public class Test {
	
	static interface Testable {
		void test1();
		
		void test2(String args);
	}
	 
	public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
		 
		 Testable t = (Testable) Proxy.newProxyInstance(Testable.class.getClassLoader(),TestA.class.getInterfaces(),new MyInvocationHandler(new TestA()));
		 
		 t.test1();
		 t.test2("你好");
	}
}

//目标类 即被代理对象类
class TestA implements Test.Testable {
	public void test1() {
		System.out.println("TestA test1");
	}
	
	public void test2(String args) {
		System.out.println("TestA test2");
	}
}

//公共处理类
class CommonHander {
	static void before() {
		System.out.println("CommonHander before");
	}
	
	static void after() {
		System.out.println("CommonHander after");
	}
}

class MyInvocationHandler implements InvocationHandler {
	
	private Testable target;
	
	public MyInvocationHandler(Testable target) {
		this.target = target;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		CommonHander handler = new CommonHander();
		handler.before();	//执行目标方法前插入其他方法
		Object result = method.invoke(target, args);
		handler.after();		//执行目标方法后插入其他方法
		return result;
	}
	
}

运行效果如下:
在这里插入图片描述

总结

使用AOP代理没有使用硬编码的方式实现了目标对象方法前、后插入其他方法!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值