代理模式

7.AOP编程

陌路散爱 提交于 2020-01-10 02:55:32
注解和 xml 混合使用 1. 将所有的 bean 都配置 xml 中 <bean id="" class=""> 2. 将所有的依赖都使用注解 @Autowired 默认不生效。为了生效,需要在 xml 配置: <context:annotation-config> 总结: 注解 1 : <context:component-scan base-package=" "> 注解 2 : <context:annotation-config> 1. 一般情况两个注解不一起使用。 2. “注解 1 ”扫描含有注解( @Component 等)类,注入注解自动生效。 “注解 2 ”只在 xml 和注解(注入)混合使用时,使注入注解生效。 一、AOP AOP 介绍 什么是 AOP 在软件业, AOP 为 Aspect Oriented Programming 的缩写,意为: 面向切面编程 ,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP 是 OOP (面向对象编程)的延续,是软件开发中的一个热点,也是 Spring 框架中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的 耦合度降低,提高程序的可重用性,同时提高了开发的效率。 AOP 采取 横向抽取 机制,取代了传统 纵向继承 体系重复性代码

Spring AOP

允我心安 提交于 2020-01-10 00:13:26
Spring整合单元测试 在前面的案例中我么需要自己创建ApplicationContext对象,然后在调用getBean来获取需要测试的Bean Spring提供了一种更加方便的方式来创建测试所需的ApplicationContext,并且可以帮助我们把需要测试的Bean直接注入到测试类中 添加依赖: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.2.RELEASE</version> </dependency> 测试代码: import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; @RunWith(SpringJUnit4ClassRunner.class)//固定写法 @ContextConfiguration("classpath

[java] java 代理对象

核能气质少年 提交于 2020-01-09 20:23:52
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 代理模式一般涉及到的角色有:   抽象角色:声明真实对象和代理对象的共同接口;   代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。   真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。 //接口 package com.wa.java.book.kernel.proxy; /** * Created by Administrator on 2015/2/11. */ public interface HelloProxy { void say(); String sendStr(String str); } 实现类: package com.wa.java.book.kernel.proxy; /** * Created by Administrator on 2015/2/11. */ public class HelloProxyImpl implements HelloProxy { @Override public

初识Nginx

↘锁芯ラ 提交于 2020-01-09 04:21:29
Nginx介绍 1、 代理模式 说到代理,首先我们要明确一个概念,所谓代理就是一个 代表 、一个 渠道 ; 此时就涉及到两个角色,一个是被 代理角色 ,一个是 目标角色 ,目标角色通过这个代理访问被代理角色完成一些任务的过程称为代理操作过程; 如同生活案例:客人到adidas专卖店买了一双鞋,这个专卖店就是代理(中介),被代理角色就是adidas厂家,目标角色就是客人。 2. 正向代理 说反向代理之前,我们先看看 正向代理 ,正向代理也是大家最常接触的到的代理模式,我们会从两个方面来说关于正向代理的处理模式,分别从 软件方面 和 生活方面 来解释一下什么叫 正向代理 。 在如今的网络环境下,我们由于需要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ”翻墙”进行访问,FQ的方式 主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们! 上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址(www.facebook.com);服务器(指官网所在的服务器)只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。 3. 反向代理(Nginx) 明白了什么是正向代理

代理模式之动态代理InvocationHandler

本秂侑毒 提交于 2020-01-08 21:05:48
本文转自 http://paddy-w.iteye.com/blog/841798 Java中动态代理的实现,关键就是这两个东西:Proxy、InvocationHandler,下面从InvocationHandler接口中的invoke方法入手,简单说明一下Java如何实现动态代理的。 首先,invoke方法的完整形式如下: public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { method.invoke(obj, args); return null; }    首先猜测一下,method是调用的方法,即需要执行的方法;args是方法的参数;proxy,这个参数是什么?以上invoke()方法的实现即是比较标准的形式,我们看到,这里并没有用到proxy参数。查看JDK文档中Proxy的说明,如下: Java代码 A method invocation on a proxy instance through one of its proxy interfaces will be dispatched to the invoke method of the instance's invocation handler, passing the proxy instance

一、代理模式:静态代理与动态代理

半世苍凉 提交于 2020-01-08 14:00:25
静态代理 动态代理 静态代理 注:实质就是使代理类和被代理类实现同一个接口,然后在代理类中添加其他操作。 MyProxy.java文件 package cn.qujialin.proxy; //代理类 public class MyProxy implements Operator{ private Operator operator; public MyProxy(Operator operator){ this.operator = operator; } @Override public int add(int i, int j) { System.out.println("proxy前"); operator.add(i,j); System.out.println("proxy后"); return 0; } @Override public int sub(int i, int j) { System.out.println("proxy前"); operator.sub(i,j); System.out.println("proxy后"); return 0; } @Override public int mul(int i, int j) { System.out.println("proxy前"); operator.mul(i,j); System.out

Nginx

﹥>﹥吖頭↗ 提交于 2020-01-08 11:45:33
什么是Nginx? Nginx 是异步框架的 网页服务器 ,也可以用作 反向代理 、负载平衡器和 HTTP 缓存。大部分 Web 服务器使用 Nginx,通常作为负载均衡器。Nginx 是免费的 开源软件 ,根据类 BSD 许可证的条款发布。 为什么要使用nginx服务器? 我们大多数的客户在他们的服务器上使用Apache作为 Web服务器 ,尤其是部署在一个基于PHP系统的前端并且使用mod-PHP。鉴于扩张性和性能方面的原因,我们通常会建议他们改用Nginx和FPM。 Apache是非常强大的Web服务器,模块化结构,也是Web服务端的鼻祖。除了捆绑一些其他的工具外,Apache已经成为了世上最广泛部署的 开源系统 ,直到最近,世界上大多数网站仍运行着Apache系统。 但是,Apache并不是完美的,并且不再适合大规模系统。为什么?因为他的进程模式虽然简单而灵活,但并不适合大规模尤其是当要处理像PHP这种需要占用大量内存应用程序代码时。 通常来说,所有新的系统都应该使用Nginx和 PHP-FPM 来部署。这能提供高性能增长特性,并且是平衡用户和内存,CPU资源的最佳选择。已存在的系统可以在前端使用Nginx或者HAProxy以达到同样的效果,以便在当今现代网络环境中为用户提供更优质的服务。 Nginx 与 Apache 相比 Nginx 的编写有一个明确目标就是超越

Java的动态代理

冷暖自知 提交于 2020-01-08 06:29:35
什么是动态代理(dynamic proxy) 动态代理(以下称代理),利用Java的反射技术(Java Reflection),在运行时 创建一个实现某些给定接口的新类 (也称“动态代理类”)及其实例(对象) (Using Java Reflection to create dynamic implementations of interfaces at runtime)。 代理的是接口(Interfaces),不是类(Class),更不是抽象类。 动态代理有什么用 解决特定问题:一个接口的实现在编译时无法知道,需要在运行时才能实现 实现某些设计模式:适配器(Adapter)或修饰器(Decorator) 面向切面编程:如AOP in Spring 创建动态代理 利用Java的Proxy类,调用Proxy.newProxyInstance(),创建动态对象十分简单。 InvocationHandler handler = new MyInvocationHandler(...); Class proxyClass = Proxy.getProxyClass(Foo.class.getClassLoader(), new Class[] { Foo.class }); Foo f = (Foo) proxyClass. getConstructor(new Class[] {

Spring AOP实现原理-动态代理

荒凉一梦 提交于 2020-01-08 04:26:18
目录 代理模式 静态代理 动态代理 代理模式 我们知道,Spring AOP的主要作用就是不通过修改源代码的方式、将非核心功能代码织入来实现对方法的增强。那么Spring AOP的底层如何实现对方法的增强?实现的关键在于使用了代理模式 代理模式的作用就是为其它对象提供一种代理,以控制对这个对象的访问,用于解决在直接访问对象时带来的各种问题。 代理主要分为两种方式:静态代理和动态代理 静态代理 静态代理主要通过将目标类与代理类实现同一个接口,让代理类持有真实类对象,然后在代理类方法中调用真实类方法,在调用真实类方法的前后添加我们所需要的功能扩展代码来达到增强的目的 示例代码: /** * 代理类与目标类的共同接口 */ public interface Subject { void request(); void response(); } /** * 目标类 */ public class RealSubject implements Subject { @Override public void request() { System.out.println("执行目标对象的request方法......"); } @Override public void response() { System.out.println("执行目标对象的response方法......"); }

Nginx

和自甴很熟 提交于 2020-01-07 16:24:25
1 Nginx的简介 1.1 Nginx概述 Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用Nginx的网站用户有:百度、京东、新浪、网易、腾讯和淘宝等。 1.2 Nginx作为web服务器 Nginx可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,比如perl、php等。但是不支持java。java程序只能通过和tomcat等服务器配置使用。Nginx专为性能优化而开发,性能是最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。 1.3 正向代理 Nginx不仅可以做反向代理,实现负载均衡。还能通过正向带来来进行上网等功能。 正向代理:如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。 例如:国内是不能访问www.google.com的,但是可以通过正向代理服务器来访问www.google.com,如下图所示: 1.4 反向代理服务器 反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端