Proxy之代理
来源:互联网 发布:云计算应用市场 编辑:程序博客网 时间:2024/04/28 16:08
今天看Spring,对于依赖注入(DI)倒是可以很好的理解,无非就是几种bean的注入管理方式而已,在学过其他的框架之后,这点倒是很好的理解,于是很快学到了Spring Aop
可以说AOP是Spring的核心吧,其Java语言基础便是动态代理,以前学习Java的时候对这个一知半解,
看实例也可以理解,但是总感觉不是很舒服,于是又将Proxy代理机制复习一遍:
以我目前之理解
动态代理方式主要如下:
第一步:代理的是接口
先创建一个接口
public interface Hello {
public void hello(String name);
}
第二步:创建一个实现了接口的类
public class HelloImpl implements Ihello {
@Override
public void hello(String name) {
System.out.println("hello"+name);// TODO Auto-generated method stub
}
}
第三步:就是创建一个代理类了,其中主要使用了一个newInstance()方法:
package pack_01;
import java.util.logging.*;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class LogHandler implements InvocationHandler {
private Logger logger=Logger.getLogger(this.getClass().getName());
private Object delegate;
/*
* 主要是使用Proxy.NewProxyInstance()方法来创建一个代理实例
* 建立对象时要告诉代理的接口,要加载的类的加载器,
*
* 绑定要代理的对象@Override
*/
public Object bind(Object delegate)
{
this.delegate=delegate;
return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(),
this);
}
//invoke()方法,代理生成的对象的方法调用时会调用该方法完成,而该方法中的invoke方法否则执行
//代理对象的方法,返回result
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result=null;
try{
logger.log(Level.INFO,"method starts"+method.getName());
result=method.invoke(delegate, args);
logger.log(Level.INFO,"method ends"+method.getName());
}
catch(Exception e)
{
logger.log(Level.INFO,e.toString());
}
// TODO Auto-generated method stub
return result;
}
第四步 测试:
public class ProxyDemo {
public static void main(String args[])
{
LogHandler loghandler=new LogHandler();
Ihello s=new HelloImpl();
Ihello proxy1=(Ihello)loghandler.bind(s);
proxy1.hello("哈哈");//此时可以调用invoke()方法执行,返回结果
}
}
之前看了类加载器以及class.forName()方法,当然也看了newInstance()这一动态创建的方法
感觉proxy就是在动态创建的基础上形成,自己的理解还有不足之处还要继续学习其他的代理模式啊
- Proxy之代理
- java之代理proxy
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 结构模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 结构模式之Proxy(代理)
- 函数:strrchr()
- windows与linux字符集转换
- 客户名单
- 制作VS 2008 动态库封装对话框
- 关于ClassLoader
- Proxy之代理
- 经常的时间格式转换 ASP.NET
- TCP、UDP协议详解
- 2010-11-15
- Android中ListView的使用
- 大数据量缓存应用--memcached+magent
- const 用法
- epoll baidu
- CoInitialize