Java动态代理---只代理指定方法

Java动态代理

具体的方法就不说了,网上不知道有多少,我就不献丑了

起因

在Spring中,我们使用注解的方法实现事务时,事务时可以使用在指定的方法上,很显然,事务的实现是通过代理的方式,在Spring中AOP主要是由Java动态代理和cglib实现,区别在于被代理的类是否实现接口,那么,具体是怎么指定方法实现代理的.我还没有看这方面的源码,所以暂时就自己想到的方法写一写,等看了源码后再写一版

过程

还是先看动态代理,主要是代理的生成过程,我们需要一个继承InvocationHandler的类,然后实现
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
的方法,然后在方法内部写我们需要的代理.
重点在于method这个参数,它的类型是Method,是反射包中的一个,如果我们想要只代理指定的方法,只要通过method指定方法名就可以了,
例如 if ("xxx".equals(method.getName())),然后在内部写我们的代理的内容,如果是不想代理的方法,直接使用method.invoke()就可以了

这个是Java动态代理的方法,cglib也是同样的

后来

其实了解Java动态代理底层的同学应该知道,这样其实并没有只代理指定方法,而是在生成的代理类中的每个方法中加入了这样一个逻辑罢了,我相信Spring肯定不是通过这样的方法实现的,抽时间一定要看一看这部分的源码

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