动态代理_AOP

看完北京圣思园张龙老师的动态代理模式的视频后仿照着写的

一个接口:

public interface Target
{
	void doSomething();
}

实现它:

public class TargetImpl implements Target
{
	@Override
	public void doSomething()
	{
		System.out.println("doSomething++++++++++++++++");
	}
}
拦截器接口:

public interface Intercepter
{
	void doBefore();
	void doAfter();
}
实现拦截器接口:

public class IntercepterImpl implements Intercepter
{
	@Override
	public void doBefore()
	{
		System.out.println("doBefore++++++++++");
	}

	@Override
	public void doAfter()
	{
		System.out.println("doAfter++++++++++++");
	}
}
一个handler,实现了java.lang.reflect.InvocationHandler

import java.lang.reflect.InvocationHandler;

public class Handler implements InvocationHandler
{
	private Target target;
	private Intercepter intercepter;
	
	public Handler(Target target, Intercepter intercepter)
	{
		this.target = target;
		this.intercepter = intercepter;
	}

	public void setIntercepter(Intercepter intercepter)
	{
		this.intercepter = intercepter;
	}

	public void setTarget(Target target)
	{
		this.target = target;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable
	{
		intercepter.doBefore();
		Object res = method.invoke(target, args);
		intercepter.doAfter();
		return res;
	}
}
生成代理的类

public class Proxy
{
	public Target getProxy(Target target, Intercepter intercepter)
	{
		Handler handler = new Handler(target, intercepter);

		return (Target) java.lang.reflect.Proxy.newProxyInstance(target
				.getClass().getClassLoader(),
				target.getClass().getInterfaces(), handler);
	}
}
测试类

public class Main
{
	public static void main(String[] args)
	{
		Target target = new TargetImpl();
		Intercepter intercepter = new IntercepterImpl();
		target = new Proxy().getProxy(target, intercepter);
		target.doSomething();
	}
}

你可能感兴趣的:(动态代理_AOP)