浅谈Java代理机制
可以说代理是java十分重要的一种机制,另一个当然是属于反射了,jdk中单独讲到了反射API(java.lang.reflect),可能有人认为反射对资源消耗比较厉害,确实也是,反射肯定是要消耗资源的,但也不是什么都要用到反射,所以最佳试验应该是在资源消耗程度和反射的使用程度之间找到一个平衡点,本文并不打算讲反射,关于反射的心得以后再贴出来,自己最近也在折磨折磨
代理可以分为:StaticProxy 和DynamicProxy
比如:
Package xyz;
import java.util.logging.*
public class talkToSomebody{
private Logger logger=Logger.getLogger(this.getClass().getName());
public void talk(String name){
logger.log(Level.INFO,"talking start....");
System.out.println("Hi!ni hao,"+name);
logger.log(Level.INFO,"talking ends....");
}
}
很显示,你需要talk其他人,其实就只有一个句话是关键的,"Hi!ni hao XXX" ,这才是需要关系的,或者叫核心业务(这个次可能有点牵强),但如果要记录你和哪些人交谈过,哪时候开始的,哪时候结束的,日志功能就是实现这个,这属于业务逻辑,把业务逻辑和核心业务放到了一起,如果哪天不需要记录了,怎么办?得重新改源代码,甚至如果客户只提供给你编译过的class或接口,你会很郁闷的!
解决方法:
用Proxy机制,其实代理就像一个中介机构,我自己突然有什么事(或者不愿意),找中介机构去做,当然你得出钱给中介机构。
public class TalkToSomebody implements ITalk{
public void talk(String name){
System.out.println("Hi,ni hao,"+name);
}
}
不错,中介机构是按照我的要求实现的,结果没错!
public class StaticProxyTalk Implements ITalk{
private Logger logger=Logger.getLogger(this.getClass().getName());
private ITalk somebody;
public StaticProxyTalk(ITalk somebody){
this.somebody=somebody;
}
public void talk(String name){
log("talking start....");
somebody.talk(name);
log("talking ending...");
}
private void log(String message){
logger.log(Level.INFO,message)
}
感觉好多了,以后我不需要中介服务了,不去找他就行,现在看下这个中介机构做得怎么样,达到我的要求了没?
public class TestProxy{
public static void main(String
相关文档:
我今天学习了用jdbc连接数据库的知识,我做了简单的笔记:
1.数据库的url jdbc:mysql://loaclhost:3306/test
jdbc:表示连接数据库使用的是jdbc协议
mysql:表示连接数据库的子协议,不同的数据库使用的协议不 一样
localhost:数据库服务器所在的ip地址
3306 :使用的端口号
tes ......
今天我学习了文件上传、下载知识,是冯老师讲的课,我做了简单的笔记:
一、文件上传时,要在页面设置:表单元素<input type=“file” />,需要指定表单 enctype 的值为 multipart/form-data
二、 Commons-fileupload 组件上传的基本原理 :
a)& ......
今天佟老师教我们使用ajax技术来完成数据库级联查询的一个小项目,课下我对这个项目做了以下笔记:
Ajax小项目:使用的技术:c3p0连接池、struts,jquery及其插件、dbutil
a) 步骤:配置c3p0的数据库连接池,导入jar包,导入oracle驱动,
b) 添 ......
Java程序员的迷失—论“虚拟机”
2009年08月 作者:东方蜘蛛译
虚拟机技术现在非常热门,人们认为它可以完成一切事情。人们热衷于让JVM可以运行Ruby、PHP或其它一些热门语言,以及支持像Java FX之类的技术。这种现象是好是坏?Joe Winchester以自己的经历来论证了对此的看法。
在Java出现之前我 ......
报表的生命周期和java类的非常相似,java被一些源文件组成,这些源文件被编译成扩展名为class的文件。同样的一个报表也是iyou一个源代码的问价年来描述的,源文件的扩展名为 . jrxml ,然后被编译成 .jasper文件.
JasperReport 是一个jar库,他提供以下主要类:
net.sf.jasperreports.engine.JasperCompileMan ......