zoukankan      html  css  js  c++  java
  • Spring(六) Spring中的静态代理

    在Spring中代理有两种一种是静态代理一种是动态代理

    这篇博客想讲一下静态代理

    首先要知道什么是静态代理(查找了一下其他博客)

    了解一下静态代理满足的条件和他的弊端

    1、需要知道核心类(被代理类)是哪一个类,并且有什么方法。 

    2、非核心的代码需要重复写多次,显得代码的结构臃肿,形成代码冗余。

    3、非核心类(代理类)需要实现核心类(被代理类)实现的接口,也就是他们需要实现共同的接口,但是以核心类实现的接口(被代理类)为准。

    下面通过一个例子来说明

    先声明一个主题接口,接口的实现类有两个一个是真实主题,一个是代理主题

    在主题接口中有一个方法

    package demo07;
    /** * Created by mycom on 2018/3/6. */ public interface Subject { public void request(); }

    在实现类中要重写这个方法

    package demo07;
    
    /**
     * Created by mycom on 2018/3/6.
     */
    public class RealSubject implements Subject {
        public void request() {
            System.out.println("真实的主题对象");
        }
    }
    package demo07;
    
    /**
     * Created by mycom on 2018/3/6.
     */
    public class ProxySubject implements Subject {
        private RealSubject realSubject;
    
        public RealSubject getRealSubject() {
            return realSubject;
        }
    
        public void setRealSubject(RealSubject realSubject) {
            this.realSubject = realSubject;
        }
    
        public void request() {
            System.out.println("Before====");
            realSubject.request();
            System.out.println("After====");
        }
    }

    在测试类中

    //代理:静态代理和动态代理
        //静态代理
        @Test
        public void t2(){
            //创建一个真实的主题对象
            RealSubject realSubject=new RealSubject();
            //创建一个代理主题对象
            ProxySubject proxySubject=new ProxySubject();
            //将真实对象赋值给代理对象
            proxySubject.setRealSubject(realSubject);
            proxySubject.request();
        }

    运行的结果

    他执行的是代理对象

  • 相关阅读:
    MVC5 Controller构造方法获取User为空解决方法
    js删除Array数组中的某个元素
    VS2015 工具箱 保存位置
    Mapper 赋值对应实体属性
    cookieHelper
    python3练习100题——007
    python3练习100题——006
    python3练习100题——005
    python3练习100题——004
    python3练习100题——003
  • 原文地址:https://www.cnblogs.com/my-123/p/8521811.html
Copyright © 2011-2022 走看看