静态代理

package staticproxy;

/**
* 接口
* @author newtouch
*
*/
public interface IHello { public void sayHello(); public String doSomethong(String s); }

  

package staticproxy;

/**
* 实现类
* @author newtouch
*
*/
public class Hello implements IHello{ @Override
public void sayHello() {
System.out.println("zhangxiongfeng"); } @Override
public String doSomethong(String s) { return s;
} }

  

package staticproxy;

/**
* 静态代理类
* @author newtouch
*
*/
/**
*
* @author newtouch
*
* 问题 如果接口中有多个方法 静态代理中 就会有多重新代理的方法
*
*/
public class StaticProxy { private IHello iHello; public StaticProxy(IHello iHello) {
this.iHello=iHello;
} public void sayHello() {
iHello.sayHello();
} public String doSomethong(String s) { return iHello.doSomethong(s);
} }

  

package staticproxy;

public class Test {

	public static void main(String[] args) {

		IHello iHello = new Hello();

		StaticProxy staticProxy = new StaticProxy(iHello);

		staticProxy.sayHello();

		System.out.println(staticProxy.doSomethong("zhangxiongfeng"));

	}

}  

动态代理:

package proxy;

/**
* 接口
* @author newtouch
*
*/
public interface IHello { public void sayHello(); public String doSomethong(String s); }

  

package proxy;

public class Hello implements IHello{

	@Override
public void sayHello() {
System.out.println("zhangxiongfeng"); } @Override
public String doSomethong(String s) { return s;
} }

  

package proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method; public class DynamicProxy implements InvocationHandler { private IHello iHello; DynamicProxy(IHello iHello) {
this.iHello = iHello;
} /**
* 调用接口 IHello接口中的 任何方法都是要用下面的方法执行
*
* 可以不用像静态代理中 每个方法都必须重写
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//  在代理真实对象前我们可以添加一些自己的操作
System.out.println("before rent house"); System.out.println("Method:" + method); // 当代理对象调用真实对象的方法时,其会自动的跳转到代理对象关联的handler对象的invoke方法来进行调用
method.invoke(iHello, args); //  在代理真实对象后我们也可以添加一些自己的操作
System.out.println("after rent house"); return null;
}
}

  

package proxy;

import java.lang.reflect.Proxy;

public class Test {

	public static void main(String[] args) {
// TODO Auto-generated method stub IHello iHello = new Hello(); DynamicProxy dynamicProxy = new DynamicProxy(iHello); IHello hello = (IHello) Proxy.newProxyInstance(dynamicProxy.getClass().getClassLoader(), iHello.getClass().getInterfaces(), dynamicProxy); // hello.sayHello(); System.out.println(hello.doSomethong("zhangxf")); } }

  动态代理执行:

before rent house
Method:public abstract void proxy.IHello.sayHello()
zhangxiongfeng
after rent house

package proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy; public class ProxyFactory<T> { private T t; private InvocationHandler invocationHandler; public ProxyFactory(T t,InvocationHandler invocationHandler) {
this.t = t;
this.invocationHandler = invocationHandler;
} public T newProxyInstance() { return (T)Proxy.newProxyInstance(invocationHandler.getClass().getClassLoader(), t.getClass().getInterfaces(), invocationHandler); }
} 动态工厂

  

Java动态代理和静态代理区别的更多相关文章

  1. Atitit 代理CGLIB 动态代理 AspectJ静态代理区别

    Atitit 代理CGLIB 动态代理 AspectJ静态代理区别 1.1. AOP 代理主要分为静态代理和动态代理两大类,静态代理以 AspectJ 为代表:而动态代理则以 spring AOP 为 ...

  2. Java中的代理模式--静态代理和动态代理本质理解

    代理模式定义:为其他对象提供了一种代理以控制对这个对象的访问. 代理模式的三种角色: Subject抽象主题角色:抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求. Real ...

  3. java中代理,静态代理,动态代理以及spring aop代理方式,实现原理统一汇总

    若代理类在程序运行前就已经存在,那么这种代理方式被成为 静态代理 ,这种情况下的代理类通常都是我们在Java代码中定义的. 通常情况下, 静态代理中的代理类和委托类会实现同一接口或是派生自相同的父类. ...

  4. Java设计模式学习06——静态代理与动态代理(转)

    原地址:http://blog.csdn.net/xu__cg/article/details/52970885 一.代理模式 为某个对象提供一个代理,从而控制这个代理的访问.代理类和委托类具有共同的 ...

  5. Java动态代理与静态代理以及它能为我们做什么

    相信我们在网上和平时学习和工作中或多或少都接触过Java的代理模式,经常听到什么静态代理.动态代理的一些名词.但我们是否真的很清楚这些呢?至少我在面试时,发现很多人并不很清楚. 首先代理比较好理解,就 ...

  6. Java代理模式/静态代理/动态代理

    代理模式:即Proxy Pattern,常用的设计模式之一.代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问. 代理概念 :为某个对象提供一个代理,以控制对这个对象的访问. 代理类和委 ...

  7. 【Java】代处理?代理模式 - 静态代理,动态代理

    >不用代理 有时候,我希望在一些方法前后都打印一些日志,于是有了如下代码. 这是一个处理float类型加法的方法,我想在调用它前打印一下参数,调用后打印下计算结果.(至于为什么不直接用+号运算, ...

  8. java 基础 --- 动态代理和静态代理

    问题  : 代理的应用场景是什么 动态代理的底层原理是什么,为什么只能继承接口 概述 代理模式是设计模式的一种,简单地说就是调用代理类的方法实际就是调用真实类的方法.这种模式在AOP (切面编程)中非 ...

  9. Java代理(静态代理、JDK动态代理、CGLIB动态代理)

    Java中代理有静态代理和动态代理.静态代理的代理关系在编译时就确定了,而动态代理的代理关系是在运行期确定的.静态代理实现简单,适合于代理类较少且确定的情况,而动态代理则给我们提供了更大的灵活性. J ...

  10. SpringAOP用到了什么代理,以及动态代理与静态代理的区别

    spring aop (面向切面)常用于数据库事务中,使用了2种代理. jdk动态代理:对实现了接口的类生成代理对象.要使用jdk动态代理,要求类必须要实现接口. cglib代理:对类生成代理对象. ...

随机推荐

  1. zookeeper快照清理

    从3.4版本以后,在配置文件中有2个参数分别设置快照的清理.默认没有打开. autopurge.purgeInterval=1 这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是0 ...

  2. Extjs4.x MVC开发模式,效率提高的两大秘诀

    最近做MVC开发的,遇到一个蛋疼的问题,每次加载模块都需要耗时3~4秒钟,才可以显示出完整的页面,通过监控,发现主要还是在Controller里慢,加载js文件等都是非常快的,但一到controlle ...

  3. 【jquery】基于 jquery 的翻牌效果 flip

    最近做了个类似于塔罗牌翻牌的效果,分享给大家. <!doctype html> <html lang="en"> <head> <meta ...

  4. android 代码混淆模板

    #指定代码的压缩级别 -optimizationpasses #包明不混合大小写 -dontusemixedcaseclassnames #不去忽略非公共的库类 -dontskipnonpublicl ...

  5. Linux中通过/proc/stat等文件计算Cpu使用率

    Linux平台Cpu使用率的计算 proc文件系统 /proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为内核与进程提供通信的接口.用户和应用程序可以通过/pro ...

  6. 自然语言交流系统 phxnet团队 创新实训 项目博客 (四)

    刚开始做时,一点头绪都没有,整天的上网找资料,各种谷歌百度,各种博客论坛,搜索的关键词也无非是智能自然语言交流.智能机器人.中文问答系统等等等等.而我们的思路也是些零散的,例如我们知道会用到分词,会用 ...

  7. Java Set List Map

    对JAVA的集合的理解是想对于数组 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型) JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java. ...

  8. Opengl绘制我们的小屋(四)第三人称漫游

    本节内容是在第一人称漫游上完成的,请先了解上文中第一人称漫游的实现. 这一节讲下第三人称漫游是如何实现,第三人称,简单来说,就是在你后面会跟着一台摄像机顺着你拍摄. 先看一下失败的尝试.这个方法是把人 ...

  9. nginx rewrite和根据url参数location

    最近项目中涉及到旧老项目迁移,需要在nginx上做些配置,所以简单学习了下,好记性不如烂笔头,先记下来. rewrite 首先查看下nginx是否支持rewrite: ./nginx -V 不支持说明 ...

  10. e835. 使JTabbedPane中的卡片生效和失效

    By default, all new tabs are enabled, which means the user can select them. A tab can be disabled to ...