Spring Spring中的静态代理

Posted 明渃筱曦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
    }

运行的结果

他执行的是代理对象

 

以上是关于Spring Spring中的静态代理的主要内容,如果未能解决你的问题,请参考以下文章

通俗易懂式分析静态代理模式_ _扎根spring AOP必须要掌握的代理模式之静态代理

Spring之静态/动态代理模式

Spring5一篇文章带你理解Spring5中的静态代理模式

spring aop

Spring AOP

5.Spring:代理模式