动态代理之cglib代理

来源:互联网 发布:易语言游戏源码大全 编辑:程序博客网 时间:2024/05/29 09:15
public class UserServiceImpl {public void add() {System.out.println("This is add service");}public void delete(int id) {System.out.println("This is delete service:delete " + id );}}


上面这个类并没有实现接口,这是JDK动态代理做不到的。





实现了MethodInterceptor的类。

import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;import java.lang.reflect.Method;/** * Created by dezhonger on 2017/3/20. */public class MyMethodInterceptor implements MethodInterceptor {public Object intercept(Object obj, Method method, Object[] arg, MethodProxy proxy) throws Throwable {System.out.println("Before:"  );Object object = proxy.invokeSuper(obj, arg);System.out.println("After:"  );return object;}}


测试:

import net.sf.cglib.proxy.Enhancer;/** * Created by dezhonger on 2017/3/20. */public class Main {public static void main(String[] args) {Enhancer enhancer = new Enhancer();enhancer.setSuperclass(UserServiceImpl.class);enhancer.setCallback(new MyMethodInterceptor());UserServiceImpl userService = (UserServiceImpl)enhancer.create();userService.add();userService.delete(123456);}}

输出:

Before:
This is add service
After:
Before:
This is delete service:delete 123456
After:

0 0