对SpringAop的思考之基于jdk的动态代理

说道动态代理,我所接触的分为两种:1、基于jdk的动态代理。2、基于cglib的动态代理。上一章说了,子所以会有动态代理,是因为避免静态代理类太多而出现的(我自己是这么理解的)。好了,废话少说,先来看一下基于jdk的动态代理吧。

首先定义一个接口:

public interface Greeting {
	
	public void sayHello(String name);

}

接着,定义实现类:

public class GreetImp implements Greeting{

	public void sayHello(String name) {
		// TODO Auto-generated method stub
		System.out.println("hello"+name);
	}

}

我们的目标就是为Greeting接口中的方法进行拦截。

我们开始写我们的动态代理类:

public class DyemJdkProxy implements InvocationHandler{

	private Object obj;
	public DyemJdkProxy(Object obj)
	{
		this.obj=obj;
	}
	
	public <T> T getProxy()
	{
		return (T) Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
	}
	
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		// TODO Auto-generated method stub
		Object result;
		System.out.println("方法前");
		result=method.invoke(obj, args);
		System.out.println("方法后");
		return result;
	}

}

就这样,我们完成了基于jdk的动态代理类的代码。。。这个代理类可以代理接口为Greeting的所以实现类了。

public static void main(String[] args) {
		GreetImp greetImp=new GreetImp();
		Greeting g=new DyemJdkProxy(greetImp).getProxy();
		g.sayHello("小明");
	}


你可能感兴趣的:(java,AOP)