静态代理

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. python 3 操作mysql数据库的方法

    参考:http://www.cnblogs.com/txw1958/archive/2012/07/22/python3-mysql.html http://www.jb51.net/article/ ...

  2. module.inc 模块

    /**  *加载所有已经在系统表被启用的模块.  *@参数$bootstrap  *是否加载在“引导模式”缓存页面加载的模块只减少集.见bootstrap.inc文件.  *@return  *如果$ ...

  3. 【嵌入式】——ads1.2的安装注意事项

    安装完ads的时候会出现错误,因为还要安装License Installation Wizard. 下一步会出现这个 然后点击Browse... 找到ads1.2下的CRACK(crack)文件夹的L ...

  4. Materialize快速入门教程

    https://materializecss.com/ https://github.com/Dogfalo/materialize http://www.materializecss.cn/ 1,下 ...

  5. 2012Google校园招聘笔试题

    1.已知两个数字为1~30之间的数字,甲知道两数之和,乙知道两数之积,甲问乙:“你知道是哪两个数吗?”乙说:“不知道”.乙问甲:“你知道是哪两个数吗?”甲说:“也不知道”.于是,乙说:“那我知道了”, ...

  6. js 实现遮罩某一部分

    借用一下喜马拉雅的效果图,比较一下下面的遮罩层的高度:       我们可以看到它的遮罩层一直都是只遮住的下面.开始想着怎么用CSS实现,几经测试也没弄出来,如果正在看这篇文章的你,知道如何用CSS达 ...

  7. 记录一下寄几个儿的greendao数据库升级,可以说是非常菜鸡了嗯

    之前使用的greendao数据库存储服务器所有的历史推送消息,但是后来消息需要加几个新的字段 举个栗子,比如要新增红色框住的字段到数据库中: 本仙女作为一只思想成熟的菜鸡,当然是加了字段就赶紧重新往里 ...

  8. javascript常用功能收藏

    引用:http://www.css88.com/archives/5180 收集了一些比较常用的javascript函数. 字符串长度截取 function cutstr(str, len) { va ...

  9. Windows 7 incorrectly reports "No Internet Access"

    PROBLEM DESCRIPTION Windows 7 may sometimes report that it has "No Internet Access"; this ...

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

    语音转文本部分是调用的科大讯飞的在线语音,它的激发方式是按键,通过按钮触发开启安卓设备的录音,此部分需要在源码中写入关于安卓权限的要求,来调用安卓的录音权限,当按钮被激发,则开始进入语音录制阶段,将麦 ...