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();
    }

运行的结果

他执行的是代理对象

原文地址:https://www.cnblogs.com/my-123/p/8521811.html

时间: 2024-08-08 09:53:21

Spring(六) Spring中的静态代理的相关文章

Spring MVC程序中得到静态资源文件css,js,图片文件的路径问题总结

上一篇 | 下一篇 Spring MVC程序中得到静态资源文件css,js,图片 文件的路径 用 Spring MVC 开发应用程序,对于初学者有一个很头疼的问题,那就是程序数据都已经查询出来了,但界面样式仍然十分丑陋,加载不了 css,js,图片等资源文件.当你在浏览器上直接输入某个css文件的路径时,直接得到404错误,而路径肯定没有错,其原因就在于在web.xml 中配置了类似如下的 spring servlet: 程序代码 <servlet>    <servlet-name&g

Java中的静态代理、通用动态代理类以及原理剖析

代理模式和静态代理 在开发中,代理模式是常用的模式之一,一般来说我们使用的代理模式基本上都是静态代理,实现模式大致如下 : 我们以网络代理为例,简单演示一下静态代理的实现 : // 网络接口 interface Network { public void surfTheInternet(); public void gotoFacebook(); } // 普通网络 class CommonNetwork implements Network { @Override public void su

Spring MVC程序中得到静态资源文件css,js,图片

转载自:http://www.blogjava.net/fiele/archive/2014/08/24/417283.html 用 Spring MVC 开发应用程序,对于初学者有一个很头疼的问题,那就是程序数据都已经查询出来了,但界面样式仍然十分丑陋,加载不了 css,js,图片等资源文件.当你在浏览器上直接输入某个css文件的路径时,直接得到404错误,而路径肯定没有错,其原因就在于在web.xml 中配置了类似如下的 spring servlet: 程序代码 <servlet>    

多线程中的静态代理模式

静态代理的例子: 1 /** 2 * 1.真实角色 3 * 2.代理角色 4 * 3.共同实现的接口 5 * @author tele 6 * 7 */ 8 public class StaticProxy { 9 public static void main(String[] args) { 10 //创建真实角色,可使用接口 11 Marry you = new You(); 12 //创建代理角色,代理角色往往要添加新的方法,不建议使用接口创建 13 WeddingCompany com

spring boot配置文件中 spring.mvc.static-path-pattern 配置项

spring boot项目中的静态资源文件存放在static文件下面,当通过浏览器访问这些静态文件时,发现必须要添加static作为前缀才能访问,折腾了一番后发现,这个前缀跟 spring.mvc.static-path-pattern 这个配置项有关. spring: mvc: static-path-pattern: /static/** 项目中application.yml配置文件中,存在如上配置项时,访问静态资源文件要加static才行,当把这个配置项除掉时,不用加static作为前缀亦

浅谈代理 模式与java中的动态代理

代理模式的定义: 代理模式是一个使用律非常高的模式,定义如下: 为其他对象提供一种代理,以控制对这个对象的访问. 类图: 简单的静态代理: public interface IRunner{ //这是一个代理类和被代理类都需要实现的接口 //在接口中定义一个抽象函数 public void request(); } //下面是真实的被代理类 public class Runner implements IRunner{ //实现接口中的方法 public void request(){ //实现

java的静态代理和动态代理(jdk、cglib)

一.代理模式 代理的概念来自于设计模式中的代理模式,先了解一下代理模式 1.结构图 2.参与者 Subject:接口,定义代理类和实际类的共用接口 RealSubject:实际类,实现Subject这个接口 Proxy:代理类,实现Subject这个接口,内部引用一个RealSubject实际类 3.描述 Proxy实现了Subject接口,内部引用一个RealSubject实际类,RealSubject能做的Proxy都会 于是Proxy代替了RealSubject,实例化到Subject里交

代理模式_静态代理

一.代理模式_静态代理 来到北京.首先第一件事就是租房子.然而北京租房子80%的都要通过中介,中介获得房屋出租的权限,出租房屋给房客.我们以这个很现实很亲近我们生活的例子来认识代理模式中的静态代理. 二.代理模式中的角色划分 2.1抽象角色:把真实角色和代理角色所共有的行为抽成一个接口或者抽象类. 2.2真实角色:被代理角色所代理的角色. 2.3代理角色:代理真实角色做某些工作. 三.静态代理示例 3.1抽象角色(把真实角色房东和代理角色中介所共有的行为出租房屋抽象成一个接口) package

Spring框架_代理模式(静态代理,动态代理,cglib代理)

共性问题: 1. 服务器启动报错,什么原因? * jar包缺少.jar包冲突 1) 先检查项目中是否缺少jar包引用 2) 服务器: 检查jar包有没有发布到服务器下:                                      用户库jar包,需要手动发布到tomcat. (每次新建项目) 3) 重新发布项目 * 配置文件错误 (web.xml / struts.xml /bean.xml /hibernate.xml / *.hbm.xml) 明确的提示 * 端口占用 * we