对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("小明");
	}


转载于:https://my.oschina.net/littlestyle/blog/533865

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值