• SSM学习笔记(4)(重点)


    问题:

     

    1、什么是动态代理模式?

    2、常见的动态代理模式有哪些?

    3、JDK动态代理的理解

     

    解决:

    1、动态代理的意义在于生成一个占位(又称代理对象),来代理真实对象,从而控制真实对象的访问。

     

    2、常见的代理模式:JDK动态代理和CGLIB动态代理

     

    3、JDK动态是java.lang.reflect.*包的提供方式,它必须借助一个接口才能产生代理对象,所以先定义接口。

    接口——》实现类——》JDK动态代理

    直接上代码:

    //接口
    public interface HelloWorld{
    public void sayHelloWorld();
    }

     

    //实现接口
    
    
    public class HelloWorldImpl implements HelloWorld{
    public void sayHelloWorld(){
    System.out.println("hello world");
    }

     

    //动态代理绑定和代理逻辑实现
    
    
    public class JdkProxyExample implements InvocationHandler{
    
    //真实对象
    private Object target = null;
    /**
    *建立代理对象和真实对象的代理关系,并返回代理对象
    */
    public Object bind(Object target){
    this.target = target;
    return Proxy.newProxyInstance(target.getClass().getClassLoader(),
    target.getClass().getInterfaces(),this);
    }
    
    //代理方法逻辑
    public Object invoke(Object proxy,Method method, Object [] args) throws
    Throwable{
    System.out.println("进入代理逻辑方法");
    System.out.println("在调度真实对象之前的服务");
    //相当于调度sayHelloWorld方法
    Object obj = method.invoke(target,args);
    System.out.println("在调度真实对象之后的服务");
    return obj;
    }
    }

    上面步骤主要是:

    1、建立代理对象和真实对象的关系,通过bind方法

    2、实现代理逻辑(invoke()方法)

    //测试JDK动态代理
    public void testJdkProxy{
    JdkProxyExample jdk = new JdkProxyExceple();
    
    HelloWorld proxy = (HelloWorldImpl)jdk.bind(new HelloWorldImpl());
    peoxy.sayHelloWorld();
    }
    会当凌绝顶,一览众山小
  • 相关阅读:
    MySQL协议分析(2)
    MySQL协议分析(1)
    《汇编语言》知识重点总结
    opencv学习(1.2)
    CentOS 6下OpenCV的安装与配置
    python2与python3之间的主要区别
    python-PEP8编码规范
    解决windows 10无法打开.hlp帮助文件的问题
    将windows server 2016改造为像windows 10一样适合个人使用的系统
    系统分析师成长之路
  • 原文地址:https://www.cnblogs.com/quenvpengyou/p/12804717.html
Copyright © 2020-2023  润新知