Java动态代理
2017-09-05 09:58
176 查看
JDK动态代理
被代理接口public interface Service { void sayHello(); }
被代理实现类
public class ProxyService implements Service { @Override public void sayHello() { System.out.println("hello"); } }
控制器
public class MyHandler implements InvocationHandler{ private Object object;//通过构造函数传入 被代理的对象 public MyHandler(Object object) { this.object = object; } /* * @param proxy 被代理的对象 * @param method 被代理的方法 * @param args 被代理的方法的参数 * */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before"); method.invoke(object,args); System.out.println("after"); return null; } }
测试类
public class Test { public static void main(String[] args) { Service service=new ProxyService();//被代理类的对象 Class cs=service.getClass();//被代理类的class // 被代理类的类加载器 接口 handler Service s= (Service)Proxy.newProxyInstance(cs.getClassLoader(), cs.getInterfaces(), new MyHandler(service)); s.sayHello(); } }
CGLIB动态代理
JDBC动态代理只能代理接口,有时候不方便,CGLIB动态代理则可以代理类。被代理类
public class UserServiceImpl { public void say(){ System.out.println("hello world"); } }
拦截器
public class MyInterceptor implements MethodInterceptor { private Object object; public Object getInstance(Object object) { this.object = object; Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(this.object.getClass()); enhancer.setCallback(this); return enhancer.create(); } @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { System.out.println("before"); Object object = methodProxy.invokeSuper(o, objects); System.out.println("after"); return object; } }
测试类
public class Test { public static void main(String[] args) { MyInterceptor myInterceptor=new MyInterceptor(); UserServiceImpl userService= (UserServiceImpl) myInterceptor.getInstance(new UserServiceImpl()); userService.say(); } }
相关文章推荐
- Java动态代理的两种实现方法
- Java的动态代理实现
- java动态代理与cglib代理的简单使用
- 动态代理---动态生成java文件并编译成class文件
- java动态代理(JDK和cglib)
- 详解Java动态代理机制(二)----cglib实现动态代理
- java之动态代理
- Java程序员从笨鸟到菜鸟之(三十九)大话设计模式(七)代理模式和java动态代理机制
- java动态代理
- Proxy模式及Java内建的动态代理机制
- Java动态代理
- java 动态代理两种实现方式
- JAVA动态代理的内部实现
- java动态代理详解,并用动态代理和注解实现日志记录功能
- 彻底理解JAVA动态代理
- 4000 java动态代理
- Java动态代理二--CGLIB动态代理应用
- Java动态代理三--模拟AOP实现
- java动态代理用法
- java动态代理