Minor【 PHP框架】6.代理

6.1 代理

  Minor提供了一个类似于java中InvocationHandler接口和一个Proxy类的代理模式的实现,具体可参考我的这篇文章:http://www.cnblogs.com/orlion/p/5350752.html

  6.1.1 使用

  

class FooController extends Controller
{
    public function bar($productName)
    {

        $log = new LogHandler();
        $shop = new Shop();
        $shopProxy = Proxy::newProxyInstance($shop, $log);
        $shopProxy->buy($productName);

    }
}
<?php

namespace App\Lib;

use Minor\Proxy\InvocationHandler;

class LogHandler implements InvocationHandler
{
    public function invoke($target, \ReflectionMethod $method, Array $args = [])
    {
        $this->before();
        $result = $method->invokeArgs($target, $args);
        $this->after();

        return $result;
    }

    public function before()
    {
        echo ‘[LogHandler] before<br/><br/>‘;
    }

    public function after()
    {
        echo ‘[LogHandler] after<br/><br/>‘;
    }
}
<?php

namespace App\Lib;

class Shop
{

    private $mail = null;

    public function boot(MailProvider $mail)
    {
        $this->mail = $mail;
    }

    public function buy($productName)
    {
        echo ‘[Shop] buy ‘ . $productName . ‘<br/><br/>‘;
        !is_null($this->mail) && $this->mail->send(‘DemoUser‘);
    }
}
时间: 2024-09-30 11:23:16

Minor【 PHP框架】6.代理的相关文章

网络爬虫之scrapy框架详解,scrapy框架设置代理

twisted介绍 Twisted是用Python实现的基于事件驱动的网络引擎框架,scrapy正是依赖于twisted, 它是基于事件循环的异步非阻塞网络框架,可以实现爬虫的并发. twisted是什么以及和requests的区别: request是一个python实现的可以伪造浏览器发送Http请求的模块,它封装了socket发送请求 twisted是基于时间循环的异步非阻塞的网络框架,它也封装了socket发送请求,但是他可以单线程的完成并发请求. twisted的特点是: 非阻塞:不等待

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

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

scrapy框架设置代理

网易音乐在单ip请求下经常会遇到网页返回码503的情况经查询,503为单个ip请求流量超限,猜测是网易音乐的一种反扒方式因原音乐下载程序采用scrapy框架,所以需要在scrapy中通过代理的方式去解决此问题在scrapy中使用代理,有两种使用方式 1.使用中间件2.直接设置Request类的meta参数 下面依次简要说明下如何使用 方式一:使用中间件要进行下面两步操作 在文件 settings.py 中激活代理中间件ProxyMiddleware在文件 middlewares.py 中实现类P

网络爬虫之scrapy框架设置代理

前戏 os.environ()简介 os.environ()可以获取到当前进程的环境变量,注意,是当前进程. 如果我们在一个程序中设置了环境变量,另一个程序是无法获取设置的那个变量的. 环境变量是以一个字典的形式存在的,可以用字典的方法来取值或者设置值. os.environ() key字段详解 windows: os.environ['HOMEPATH']:当前用户主目录. os.environ['TEMP']:临时目录路径. os.environ[PATHEXT']:可执行文件. os.en

Adroid动态加载Apk-插件化技术框架(动态代理方案)

技术:Android + java +动态加载+插件化 概述 为什么要使用插件化?在开发中,一个项目只会越做越大.初始版本可能是单一功能,后续可能加上各种风马牛不相及的功能.所以我认为插件化可以使得业务分离的更彻底,一人负责哪几个模块,问题也能快速定位.但是也会带来问题:插件和插件之间的交互的复杂性更高.底层支持库因为多个插件需要使用相同的代码可能会变得很大.所以插件化看似解耦了程序员的职责,实际上对于代码质量的要求更高.   实现插件化,最快的方法就是找一个第三方框架.但是要想真正理解,需要真

Spring框架静态代理和动态代理

1.域属性注入 创建实体类Student package com.spring.entity; public class Student { //普通属性 private Integer id; private String name; //域属性 private Car car; public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } public Integer getId() {

Hadoop新MapReduce框架Yarn详解

简介 本文介绍了Hadoop自0.23.0版本后新的MapReduce框架(Yarn)原理,优势,运行机制和配置方法等,着重介绍新的yarn框架相对于原框架的差异及改进,并通过Demo示例详细介绍了在新的Yarn框架下搭建和开发Hadoop程序的方法.读者通过本文中新旧Hadoop MapReduce框架的对比,更深刻理解新的yarn框架技术与那里和设计思想,文中的Demo代码经过微小修改既可用于用户基于Hadoop新框架的实际生产环境. Hadoop MapReduceV2(Yarn)框架简介

Hadoop MapReduceV2(Yarn) 框架

Hadoop MapReduceV2(Yarn) 框架简介 原 Hadoop MapReduce 框架的问题 对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分布式文件存储及处理框架,对于 Hadoop 框架的介绍在此不再累述,读者可参考 Hadoop 官方简介.使用和学习过老 Hadoop 框架(0.20.0 及之前版本)的同仁应该很熟悉如下的原 MapReduce 框架图: 图 1.Hadoop 原 MapReduce 架构 从上图中可以清楚的看出原 MapRed

Hadoop 新 MapReduce 框架 Yarn 详解

原 Hadoop MapReduce 框架的问题 对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分布式文件存储及处理框架,对于 Hadoop 框架的介绍在此不再累述,读者可参考 Hadoop 官方简介.使用和学习过老 Hadoop 框架(0.20.0 及之前版本)的同仁应该很熟悉如下的原 MapReduce 框架图: 图 1.Hadoop 原 MapReduce 架构 从上图中可以清楚的看出原 MapReduce 程序的流程及设计思路: 首先用户程序 (JobCli

ORM Nhibernate框架在项目中的配置

在项目中使用 Nhibernet 时,一定要将 配置文件 .xml  编译方式设置为 嵌入式资源,否则在运行项目时就会出现错误. 以下是hibernate.cfg.xml 的配置,在配置中使用的是 Mysql 数据库 <?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"&g