[Static]

  IFeature.java
ImpicateF.java
Runport.java
StaticProxy.java IFeature.java
package UProxy.staticMethod;
public interface IFeature {
public void AccessClouds(String who);
} ImpicateF.java
package UProxy.staticMethod;
public class ImpicateF implements IFeature { @Override
public void AccessClouds(String who) {
System.out.println(who+" is Accessing Clouds.");
}
} Runport.java
package UProxy.staticMethod;
public class Runport { public static void main(String[] args) {
String who="Tomas";
IFeature i=new ImpicateF(); StaticProxy sp=new StaticProxy(i);
sp.AccessClouds(who);
} } StaticProxy.java
package UProxy.staticMethod;
public class StaticProxy implements IFeature{ public IFeature target; public StaticProxy(IFeature target){
this.target=target;
} @Override
public void AccessClouds(String who) { System.out.println(who+" pre access clouds.");
target.AccessClouds(who);
System.out.println(who+" aft access clouds.");
} }

[Dynamic]

 IFeature.java
ImpicateF.java
ProxyFactory.java
Rundyport.java IFeature.java
package UProxy.dyMethod;
public interface IFeature {
public void AccessClouds(String who);
} ImpicateF.java
package UProxy.dyMethod;
public class ImpicateF implements IFeature { @Override
public void AccessClouds(String who) {
System.out.println(who+" is Accessing Clouds.");
} } ProxyFactory.java
package UProxy.dyMethod;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; public class ProxyFactory {
public Object target; public ProxyFactory(Object target){
this.target=target;
}
public Object getProxyInstance(){
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler(){ @Override
public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable {
System.out.println("transaction begin.");
Object returnValue = arg1.invoke(target, arg2);
System.out.println("transaction end.");
return returnValue;
}});
}
} Rundyport.java
package UProxy.dyMethod;
public class Rundyport { public static void main(String[] args) { IFeature ifs= new ImpicateF();
IFeature pf=(IFeature)new ProxyFactory(ifs).getProxyInstance();
pf.AccessClouds("QUEEBKE"); } }

[CG]

// add spring-core-xxx.jar

ImpicateF.java
ProxyFactory.java
Runcgport.java ImpicateF.java
package UProxy.cglibMethod;
public class ImpicateF {
public void AccessClouds(String who) {
System.out.println(who+" is Accessing Clouds.");
}
} ProxyFactory.java
package UProxy.cglibMethod;
import java.lang.reflect.Method; import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy; public class ProxyFactory implements MethodInterceptor { Object target;
public ProxyFactory(Object target){
this.target=target;
} public Object getInsataceProxy(){
Enhancer en=new Enhancer();
en.setSuperclass(target.getClass());
en.setCallback(this);
return en.create();
} @Override
public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable { System.out.println("transaction 01");
Object o=arg1.invoke(target, arg2);
System.out.println("transaction 02");
return o;
} } Runcgport.java
package UProxy.cglibMethod; public class Runcgport { public static void main(String[] args) {
ImpicateF imf= new ImpicateF();
ImpicateF imf1=(ImpicateF)new ProxyFactory(imf).getInsataceProxy();
imf1.AccessClouds("pizz ");
} }

proxy in java的更多相关文章

  1. Proxy实现java动态代理

    在java设计模式中代理模式的应用比较广泛, 比如我在编写一写web程序时在filter修改request或response时, 而request中并没有相应的set方法, 这样要做到修改就需要使用一 ...

  2. Proxy Pattern(Java动态代理和cglib的实现)

    代理模式:给某一个对象提供代理对象,由代理对象控制具体对象的引用. 代理,指的就是一个角色对表另一个角色采取行动,就生活中,一个红酒厂商,是不会直接把红酒零销给客户的,都是通过代理完成他的销售业务.而 ...

  3. JRebel: ERROR Could not define reloadable class 'com.sun.proxy.$Proxy118': java.lang.OutOfMemoryError: PermGen space

    MyEclipse由于配置了JRebel,所以是它报错,不过根本问题还是:java.lang.OutOfMemoryError: PermGen space 现在按照经验调整内存大小. 在MyEcli ...

  4. java Proxy(代理机制)

    我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习 ...

  5. 自己写一个java.lang.reflect.Proxy代理的实现

    前言 Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的.本文就自己写一个Pr ...

  6. Java dynamical proxy demo

    今天练习了一下动态代理的一个方面,假设使用它来完成自动设置默认不提交,启动事务,获取到异常则回滚,正常执行则提交. 如果不使用动态代理,则需要在每个方法本身里面设置Connection,写try,ca ...

  7. Set Java Proxy for Http/Https

     Command Line JVM Settings The proxy settings are given to the JVM via command line arguments: java ...

  8. JAVA基础知识之网络编程——-使用Proxy创建连接

    在前面的HTTP网络通信的例子中,使用了URLConnection conn = url.openConnection();连接网络, 如果改用URLConnection conn = url.ope ...

  9. java 动态代理深度学习(Proxy,InvocationHandler),含$Proxy0源码

    java 动态代理深度学习, 一.相关类及其方法: java.lang.reflect.Proxy,Proxy 提供用于创建动态代理类和实例的静态方法.newProxyInstance()返回一个指定 ...

随机推荐

  1. redis的windows版本下载地址及windows的客户端工具

    源码:https://github.com/MSOpenTech/redis 安装包:https://github.com/MSOpenTech/redis/releases 客户端工具:https: ...

  2. 案例分析:大数据平台技术方案及案例(ppt)

    大数据平台是为了计算,现今社会所产生的越来越大的数据量,以存储.运算.展现作为目的的平台.大数据技术是指从各种各样类型的数据中,快速获得有价值信息的能力.适用于大数据的技术,包括大规模并行处理(MPP ...

  3. eclipse 配置 tomcat 时候的一些注意事项(随机更新)

    1,一些常用的设置,如下图,不特别说明了,看标记应该就知道注意事项了 2,配置文件的问题.eclipse里面如下图的配置文件里如果有所改动,那么在eclipse里启动Tomcat的时候,Tomcat的 ...

  4. MDL的一些理解

    驱动程序要操作一个用户模式下的内存(32位下小于2G),那么是有风险的,因为用户模式下当前进程的线程不断切换,用户模式下的地址可能会无效.这时的操作将会有未知结果. 用MDL系统API可以将用户模式下 ...

  5. php基础-------preg_replace()与preg_replace_callback()

    1.preg_replace() 执行一个正则表达式的搜索和替换. 语法: mixed preg_replace ( mixed $pattern , mixed $replacement , mix ...

  6. css控制单行或者多行文本超出显示省略号

    1.单行文本 使用text-overflow:ellipsis属性 text-overflow: clip|ellipsis|string; clip:修剪文本. ellipsis:显示省略符号来代表 ...

  7. 【Paper Reading】Deep Supervised Hashing for fast Image Retrieval

    what has been done: This paper proposed a novel Deep Supervised Hashing method to learn a compact si ...

  8. Shell(五)Shell输入/输出重定向

    Shell 输入/输出重定向 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令 ...

  9. 【转】 c#中两个DateTimePicker,一个时间设置为0:0:0,另一个设置为23:59:59

    [转] c#中两个DateTimePicker,一个时间设置为0:0:0,另一个设置为23:59:59 stp1为第一个DateTimePicker this.dtp1.Value=this.dtp1 ...

  10. Nginx 项目部署和配置

    nginx 作为代理服务器,需要代理多个项目的话配置如下: server { listen       80; server_name  localhost; #charset koi8-r; #ac ...