1.静态代理
接口或抽象类:
package com.bian.jdom.asyn;
public interface HelloWord {
public void sayHello();
}
被代理的类:
package com.bian.jdom.asyn;
public class HelloWordImpl implements HelloWord {
public HelloWordImpl(){
}
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("Hello word ! ");
}
}
静态代理类:
package com.bian.jdom.asyn;
public class StaticProxy implements HelloWord {
HelloWord helloword = null;
public StaticProxy(HelloWord helloword){
this.helloword = helloword;
}
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("调用之前处理一些事物");
this.helloword.sayHello();
System.out.println("调用之后处理一些事物");
}
}
测试类:
package com.bian.jdom.asyn;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
StaticProxy staticProxy = new StaticProxy(new HelloWordImpl());
staticProxy.sayHello();
}
}
说明:静态代理方式在新增一个方法的时候会同时修改
接口类 被代理的类 静态代理类。
代码量比较大,不够灵活,容易出错。
2.动态代理
接口类:
package com.bian.jdom.asyn;
import java.util.List;
public interface HelloWord {
public void sayHello();
public void sayName(String name);
public List getList();
}
被代理类:
package com.bian.jdom.asyn;
import java.util.ArrayList;
import java.util.List;
public class HelloWordImpl implements HelloWord {
public HelloWordImpl(){
}
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("Hello word ! ");
}
public void sayName(String name){
System.out.println(name);
}
public List getList(){
List list = new ArrayList();
list.add("name");
return list;
}
}
动态代理类:
package com.bian.jdom.asyn;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class DynamicProxy implements InvocationHandler {
private Object object = null;
public Object bind(Object obj){
object = obj;
return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), this);
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = method.invoke(object, args);
return result;
}
}
测试类:
package com.bian.jdom.asyn;
import java.util.List;
public class TestDynamicProxy {
public static void main(String[] args){
HelloWord helloword = new HelloWordImpl();
DynamicProxy proxy = new DynamicProxy();
//在这里绑定的是HelloWord,也就是HelloWord是被代理接口。所以绑定关系时,需要传递一个HelloWorld的实现类的实例化对象。
HelloWord hello = (HelloWord)proxy.bind(helloword);
hello.sayHello();
hello.sayName("bian");
List list = hello.getList();
System.out.println(list.size()+" "+list.get(0).toString());
}
}
分享到:
相关推荐
JAVA静态代理和动态代理
Java静态代理和动态代理
这里提供了静态代理和动态代理的入门写法~一看即懂!
Java设计模式——代理设计模式(静态代理和动态代理) 各种情况例子源码
在代理模式中,主要有两种类型:静态代理和动态代理。 1.静态代理: 静态代理是指在编译期间就已经确定代理类和被代理类的关系,需要手动编写代理类。代理类需要实现与被代理类相同的接口,并且在代理类中持有一个被...
java提高-动态代理与静态代理.docx
NULL 博文链接:https://871656094.iteye.com/blog/2355335
Java 静态代理
- 静态代理与动态代理 - 常见的动态代理实现 - JDK Proxy - CGLIB - JDK Proxy 和 CGLIB 的对比 - 动态代理的实际应用 - Spring AOP 说在前面:今天我们来聊一聊 Java 中的代理,先来聊聊故事背景: 小明想...
Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理)
java static proxy dynamic proxy
Java 代理模式: 详见:http://blog.csdn.net/q610098308/article/details/74144046
Java中的代理模式--静态代理和动态代理 Java中的代理模式--静态代理和动态代理
JAVA JDK静态代理、动态代理、CGlib代理的代码演示 为对象增加功能
本工程是对静态代理,动态代理的测试,并且实现了对jdk动态代理的简单模拟!
利用一个Car接口详细介绍了静态代理技术和JDK动态动态代理技术
1:静态代理出现的实际背景,静态代理时如何演化成动态代理 2: 动态代理demo 举例实际应用场景(载入数据库驱动的时候,使用AIDL与系统Servic进行通信) 3: 动态代理使用到基础理论:ClassLoader 加载.class字节码...