proxy in java

[Static]

 1  IFeature.java
 2  ImpicateF.java
 3  Runport.java
 4  StaticProxy.java
 5 
 6  IFeature.java
 7 package UProxy.staticMethod;
 8 public interface IFeature {
 9     public void AccessClouds(String who);
10 }
11 
12  ImpicateF.java
13 package UProxy.staticMethod;
14 public class ImpicateF implements IFeature {
15 
16     @Override
17     public void AccessClouds(String who) {
18         System.out.println(who+" is Accessing Clouds.");
19     }
20 }
21 
22 Runport.java
23 package UProxy.staticMethod;
24 public class Runport {
25 
26     public static void main(String[] args) {
27         String who="Tomas";
28         IFeature i=new ImpicateF();
29         
30         StaticProxy sp=new StaticProxy(i);
31         sp.AccessClouds(who);
32     }
33 
34 }
35 
36 
37 StaticProxy.java
38 package UProxy.staticMethod;
39 public class StaticProxy implements IFeature{
40 
41     public IFeature target;
42     
43     public StaticProxy(IFeature target){
44         this.target=target;
45     }
46     
47     @Override
48     public void AccessClouds(String who) {
49         
50         System.out.println(who+" pre access clouds.");
51         target.AccessClouds(who);
52         System.out.println(who+" aft access clouds.");
53     }
54 
55 }

[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 ");
    }

}
原文地址:https://www.cnblogs.com/rojas/p/8558203.html