zoukankan      html  css  js  c++  java
  • JDK动态代理

    Jdk 动态代理通过反射包提供的方式,必须要借助一个借口才能产生反射对象

    1.定义接口:

    public interface HelloWorld 
    {
        public void sayHelloWorld();
        public void sayBye();
    }

    2.实现接口。

    public class HelloWorldImpl implements HelloWorld
    {
    
        @Override
        public void sayHelloWorld() 
        {
            System.out.println("hello world.....");
        }
    
        @Override
        public void sayBye() 
        {
            System.out.println("good bye.....");
        }
    
    }

    3. JDK 动态代理要实现逻辑类,必须去实现java.lang.reflect.InvocationHandler接口, 里面定义了invoke方法。

    public class JdkProxy implements InvocationHandler
    {    
            //真实对象
        private Object target;
        
            //返回代理对象
        public Object bind(Object target)
        {
            this.target=target;
            return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
        }
            //代理方法逻辑
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            System.out.println("entrance proxy method....");
            System.out.println("before call real obj method.....");
            Object obj = method.invoke(target, args);//相当调用sayHello/bye
            System.out.println("after real obj.....");
            return obj;
        }
    }

    4.测试类:

    public class JdkProxyTest {
    
        public static void main(String[] args) 
        {
            JdkProxy jdk = new JdkProxy();
            HelloWorld hellow = (HelloWorld) jdk.bind(new HelloWorldImpl());
            hellow.sayHelloWorld();
            hellow.sayBye();
        }
    
    }
    输出:
    entrance proxy method....
    before call real obj method.....
    hello world.....
    after real obj.....
    entrance proxy method....
    before call real obj method.....
    good bye.....
    after real obj.....
  • 相关阅读:
    python学习之控制语句
    linux中的网络基础
    python学习之准备
    linux用户权限
    python学习之函数和函数参数
    python学习之输出与文件读写
    linux中的vim编辑器的使用
    从产品和用户角度,思考需求和用户体验
    好记性不如烂笔头
    TI DaVinci(达芬奇)入门
  • 原文地址:https://www.cnblogs.com/daxiong225/p/9900393.html
Copyright © 2011-2022 走看看