Enhance基本例子
太晚了,有些东西没有补充,回头再补上。
先上Demo
1.要执行的方法
package enhancerTest;/*** Created by LiuSuSu on 2017/3/26.*/public class UserService {public void doxx(){System.out.println("do...");}}
2. 代理类
package enhancerTest;import org.springframework.cglib.proxy.MethodInterceptor;import org.springframework.cglib.proxy.MethodProxy;import java.lang.reflect.Method;/*** Created by LiuSuSu on 2017/3/26.*/public class CglibCallBackUserService implements MethodInterceptor {/*** cglib调用的** @param o 调用对象* @param method 调用的方法* @param args 参数* @param methodProxy 代理的方法* @return* @throws Throwable*/@Overridepublic Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {System.out.println("before " + method.getName());//注意invoke代理的是自己,这是一个递归,死循环//Object obj= methodProxy.invoke(o, args);Object obj = methodProxy.invokeSuper(o, args);System.out.println("after " + method.getName());return obj;}}
3.测试方法
package enhancerTest;import org.springframework.cglib.proxy.Enhancer;/*** Created by LiuSuSu on 2017/3/26.*/public class EnhanceTest {public static void main(String[] args) {Enhancer enhancer = new Enhancer();enhancer.setSuperclass(UserService.class);enhancer.setCallback(new CglibCallBackUserService());UserService service = (UserService) enhancer.create();service.doxx();System.out.println("over");}}
4.运行结果
before doxx
do...
after doxx
over
灵活性上远远大于传统的代理模式。
Doing is better than nothing

浙公网安备 33010602011771号