ProxyPattern与AOP
来源:互联网 发布:章鱼保罗 知乎 编辑:程序博客网 时间:2024/05/21 03:17
代理就是对一个类进行的代理,或是托管。简单的讲就是对原有类加了一个壳,当程序执行的时候不执行原来的类,首
先执行代理类,代理类,可以决定是否执行真正要调用的类。用途,最常见的就是数据库连接池,数据库连接池里的连
接是不能被关闭的,那么,你总不能单独写一个connectionClose方法吧?所以就要代理掉Conection接口的实现类
(java的代理是面向接口的代理),代理类判断当执行的方法是close方法的时候就不予执行close操作。其他就是
spring中的aop,大量用到了代理。事实上,struts的拦截器也是一种代理。
RealObject real;
dosth()
{
//委托
real.dosth(); //现实世界里,委托是将本人的责任托付给别人,而此Pattern中正好相反。
}
private synchronized void realize
{
if(real==null)
real=new RealObject();
}
}
用处之一: eg:GoF一书中所举的ProxyPattern例子,是一个内嵌图形对象的文件编辑器,因为欲产生图形对象要花很
长时间,每次开启文件都产生图形对象的话很浪费时间,。其实在等到图形对象要输出到画面上时再去产生比较好。而
ProxyPattern此时就能发挥它的作用。
Collection collProxyObj=(Collection) Proxy.newProxyInstance(Collection.class.getClassLoader(), new Class[]
{Collection.class}, new InvocationHandler() {
ArrayList target=new ArrayList ();
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("执行的方法是:"+method.getName());
return method.invoke(target, args);
// 若method.invoke(proxyObj, args); 则死循环
/*返回:
从代理实例的方法调用返回的值。如果接口方法的声明返回类型是基本类型,则此方法返回的值一定是相应基本包装对
象类的实例;否则,它一定是可分配到声明返回类型的类型。如果此方法返回的值为 null 并且接口方法的返回类型是基
本类型,则代理实例上的方法调用将抛出 NullPointerException。否则,如果此方法返回的值与上述接口方法的声明返
回类型不兼容,则代理实例上的方法调用将抛出 ClassCastException。*/
}
});
JS中:
var i=0;
eval("i++;i+=7"); //通过传递str串 插入一段代码
alert(i);
Java中却不可以,那怎么样插入一段代码 实现面向切面的编程呢,传递对象,调用对象的方法,实现插入一段代码相同
的作用。。
Collection collProxyObj=(Collection) Proxy.newProxyInstance(Collection.class.getClassLoader(), new Class[]
{Collection.class}, new InvocationHandler(Logger log,Security sec){});这样 就切入了 日志和安全审计的功能。
先执行代理类,代理类,可以决定是否执行真正要调用的类。用途,最常见的就是数据库连接池,数据库连接池里的连
接是不能被关闭的,那么,你总不能单独写一个connectionClose方法吧?所以就要代理掉Conection接口的实现类
(java的代理是面向接口的代理),代理类判断当执行的方法是close方法的时候就不予执行close操作。其他就是
spring中的aop,大量用到了代理。事实上,struts的拦截器也是一种代理。
代理 故名思议 带替你去处理
ProxyObject{RealObject real;
dosth()
{
//委托
real.dosth(); //现实世界里,委托是将本人的责任托付给别人,而此Pattern中正好相反。
}
private synchronized void realize
{
if(real==null)
real=new RealObject();
}
}
用处之一: eg:GoF一书中所举的ProxyPattern例子,是一个内嵌图形对象的文件编辑器,因为欲产生图形对象要花很
长时间,每次开启文件都产生图形对象的话很浪费时间,。其实在等到图形对象要输出到画面上时再去产生比较好。而
ProxyPattern此时就能发挥它的作用。
Collection collProxyObj=(Collection) Proxy.newProxyInstance(Collection.class.getClassLoader(), new Class[]
{Collection.class}, new InvocationHandler() {
ArrayList target=new ArrayList ();
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("执行的方法是:"+method.getName());
return method.invoke(target, args);
// 若method.invoke(proxyObj, args); 则死循环
/*返回:
从代理实例的方法调用返回的值。如果接口方法的声明返回类型是基本类型,则此方法返回的值一定是相应基本包装对
象类的实例;否则,它一定是可分配到声明返回类型的类型。如果此方法返回的值为 null 并且接口方法的返回类型是基
本类型,则代理实例上的方法调用将抛出 NullPointerException。否则,如果此方法返回的值与上述接口方法的声明返
回类型不兼容,则代理实例上的方法调用将抛出 ClassCastException。*/
}
});
JS中:
var i=0;
eval("i++;i+=7"); //通过传递str串 插入一段代码
alert(i);
Java中却不可以,那怎么样插入一段代码 实现面向切面的编程呢,传递对象,调用对象的方法,实现插入一段代码相同
的作用。。
Collection collProxyObj=(Collection) Proxy.newProxyInstance(Collection.class.getClassLoader(), new Class[]
{Collection.class}, new InvocationHandler(Logger log,Security sec){});这样 就切入了 日志和安全审计的功能。
- ProxyPattern与AOP
- [DesignPattern]ProxyPattern
- 代理模式 -虚拟代理 ProxyPattern
- 代理模式 -远程代理 ProxyPattern
- 代理模式 -保护代理 ProxyPattern
- spring aop与cglib aop
- AOP与Spring控制AOP
- aop:Aspect与aop:Advisor
- 设计模式-------代理模式(ProxyPattern)
- .NET :消息与AOP
- AOP、OOP与OOD
- AOP观念与术语
- AOP观念与术语
- AOP 与 AspectJ5
- .NET :消息与AOP
- .NET :消息与AOP
- Hook与AOP
- Hook与AOP
- linux机器上执行ping命令的java方法
- 二进制转换
- PyCharm配置
- 第十六周上机任务项目4-指来指去 (2)
- 第六届中国软件质量年会邀请函
- ProxyPattern与AOP
- C++实现双精度浮点数四则运算
- POJ 1459 Power Network
- 发博文的模板,不用每次都去贺老师的博客里去找了。。
- Sql 查询同一个表中两个字段里相同的数据
- NPOI锦囊:如何用NPOI生成可下载的Excel
- 16周项目一:字符串(复制字符串str1,并保存到str2中)
- π的高精度表示法
- 程序员读高中时候的聪明轶事