• 动态代理


     1 分为jdk自带代理
     2 实现接口 InvocationHandler  ,用反射调用方法
     3 获取代理类:Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(), new TestProxy(obj));
     4 
     5 实例:
     6 public interface ReadFile {
     7     public void read();
     8 }
     9 
    10 public class Boss implements ReadFile {
    11     @Override
    12     public void read() {
    13         System.out.println("I'm reading files.");
    14     }
    15 }
    16 
    17 public class Secretary implements InvocationHandler {
    18     private Object object;
    19     public Secretary(Object object) {
    20         this.object = object;
    21     }
    22     @Override
    23     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    24         System.out.println("I'm secretary.");
    25         Object result = method.invoke(object, args);
    26         return result;
    27     }
    28 }
    29 
    30 public class Main {
    31     public static void main(String[] args) {
    32         ReadFile boss = new Boss();
    33         InvocationHandler handler = new Secretary(boss);
    34         ReadFile secretary = (ReadFile) Proxy.newProxyInstance(
    35                 boss.getClass().getClassLoader(),
    36                 boss.getClass().getInterfaces(),
    37                 handler);
    38         secretary.read();
    39     }
    40 }
    41 
    42 
    43 
    44 CGLIB具有简单易用,它的运行速度要远远快于JDK的Proxy动态代理:
    45 public class CglibProxy implements MethodInterceptor {
    46     @Override
    47     public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
    48         System.out.println("++++++before " + methodProxy.getSuperName() + "++++++");
    49         System.out.println(method.getName());
    50         Object o1 = methodProxy.invokeSuper(o, args);
    51         System.out.println("++++++before " + methodProxy.getSuperName() + "++++++");
    52         return o1;
    53     }
    54 }
    55 public class Main2 {
    56     public static void main(String[] args) {
    57         CglibProxy cglibProxy = new CglibProxy();
    58  
    59         Enhancer enhancer = new Enhancer();
    60         enhancer.setSuperclass(UserServiceImpl.class);
    61         enhancer.setCallback(cglibProxy);
    62  
    63         UserService o = (UserService)enhancer.create();
    64         o.getName(1);
    65         o.getAge(1);
    66     }
    67 }
  • 相关阅读:
    博主推荐-工作中常用到一些不错的网址整理
    使用ansible部署CDH 5.15.1大数据集群
    ElasticSearch的API介绍
    HTML&CSS基础-CSS Hcak
    运维开发笔记整理-创建django用户
    运维开发笔记整理-数据库同步
    运维开发笔记整理-QueryDict对象
    运维开发笔记整理-template的使用
    运维开发笔记整理-JsonResponse对象
    运维开发笔记整理-Request对象与Response对象
  • 原文地址:https://www.cnblogs.com/cowshed/p/11397682.html
Copyright © 2020-2023  润新知