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(); }
运行的结果
他执行的是代理对象