zoukankan      html  css  js  c++  java
  • java学习笔记14--动态代理

    java学习笔记14--动态代理

     

    InvocationHandler接口

    1. public interface InvocationHandler{  
    2.     public Object invoke(Object proxy,Method method,Object[] args)throws Throwable  
    3. }  


    参数说明:

    Object  proxy:被代理的对象

    Method  method:要调用的方法

    Object   args[]:方法调用时所需要的参数

    Proxy类

    Proxy类是专门完成代理的操作类,可以通过此类为一个或多个接口动态地生成实现类,此类提供了如下的操作方法:

    1. public static Object newProxyInstance(ClassLoader loader,  
    2.             Class<?>[] interfaces,  
    3.             InvocationHandler h)  
    4.             throws IllegalArgumentException  

    参数说明:

    ClassLoader  loader:类加载器

    Class<?>[]  interfaces:得到全部的接口

    InvocationHandler  h:得到InvocationHandler接口的子类实例

     

    动态代理:

    1. package com.itmyhome;  
    2.   
    3. import java.lang.reflect.InvocationHandler;  
    4. import java.lang.reflect.Method;  
    5. import java.lang.reflect.Proxy;  
    6.   
    7. interface IHello{    //定义接口  
    8.     public void sayHello();  
    9. }  
    10. class HelloImpl implements IHello{  
    11.   
    12.     @Override  
    13.     public void sayHello() {  
    14.         // TODO Auto-generated method stub  
    15.         System.out.println("hello itmyhome");  
    16.     }  
    17. }  
    18. class MyInvocationHandler implements InvocationHandler{  
    19.   
    20.     private Object obj;   //真实主题类  
    21.     public Object bind(Object obj){  
    22.         this.obj = obj;  
    23.         return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);  
    24.     }  
    25.     @Override  
    26.     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {  
    27.         System.out.println("***before***");  
    28.         Object temp = method.invoke(obj, args);  
    29.         System.out.println("***after***");  
    30.         return temp;  
    31.     }  
    32. }  
    33.   
    34. public class T {  
    35.     public static void main(String[] args) throws Exception{  
    36.         IHello h = (IHello)new MyInvocationHandler().bind(new HelloImpl());  
    37.         h.sayHello();  
    38.     }  
    39. }  
  • 相关阅读:
    nginx优化之配置文件优化一常用参数
    Centos7+LVS-DR+Apache负载均衡web实验
    LVS负载均衡原理
    Centos7+LVS-NAT+apache实验
    CentOS7.6 使用ceph-deploy部署mimic 13.2.8集群(一)
    linux关闭ACPI电源管理模块
    Jenkins + pipeline + Git + PHP (九)
    Jenkins-Master-slave架构(八)
    Jenkins参数化构建(七)
    Jenkins连接Git仓库时候报错Permission denied, please try again.
  • 原文地址:https://www.cnblogs.com/timssd/p/4790451.html
Copyright © 2011-2022 走看看