flying
既然选择了远方,只有风雨兼程
BlogJava
|
首页
| |
发新文章
|
联系
|
聚合
|
管理
Java动态代理的一个例子
<struts2
权威指南
>
的一个例子,是用
JDK
动态代理来实现拦截器功能。
JDK
动态代理只能对实现了接口的实例来生成代理。
首先一个接口:
Dog.java
package
my;
public
interface
Dog
{
public
void
info();
}
实现接口的一个实例(DogImpl.java):
package
my;
public
class
DogImpl
implements
Dog
{
public
void
info()
{
System.out.println(
"
我就是我
"
);
}
}
定义一个拦截DogImpl类的实例(DogIntercepter.java):
package
my;
public
class
DogIntercepter
{
public
void
method1()
{
System.out.println(
"
拦截器的方法1
"
);
}
public
void
method2()
{
System.out.println(
"
拦截器的方法2
"
);
}
}
下面需要一个实现InvocationHanlder接口的代理类(ProxyHander.java):
package
my;
import
java.lang.reflect.Method;
import
java.lang.reflect.InvocationHandler;
public
class
ProxyHandler
implements
InvocationHandler
{
private
Object target;
DogIntercepter di
=
new
DogIntercepter();
public
Object invoke(Object proxy,Method method,Object[] args)
throws
Exception
{
Object result
=
null
;
if
(method.getName().equals(
"
info
"
))
{
di.method1();
result
=
method.invoke(target,args);
di.method2();
}
else
{
result
=
method.invoke(target,args);
}
return
result;
}
public
void
setTarget(Object o)
{
this
.target
=
o;
}
}
代理工厂类(MyProxyFactory.java),用来根据目标对象生成代理对象:
package
my;
import
java.lang.reflect.Proxy;
public
class
MyProxyFactory
{
public
static
Object getProxy(Object object)
{
ProxyHandler handler
=
new
ProxyHandler();
handler.setTarget(object);
return
Proxy.newProxyInstance(DogImpl.
class
.getClassLoader(),object.getClass().getInterfaces(),handler);
}
}
主程序(TestDog.java):
package
my;
public
class
TestDog
{
public
static
void
main(String[] args)
{
Dog targetObject
=
new
DogImpl();
Dog dog
=
null
;
Object proxy
=
MyProxyFactory.getProxy(targetObject);
if
(proxy
instanceof
Dog)
{
dog
=
(Dog)proxy;
}
dog.info();
}
}
ok.使用动态代理实现了拦截器的功能.
发表于 2008-10-02 20:42
gooogle
阅读(191)
评论(0)
编辑
收藏
所属分类:
JAVA
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
在struts2中利用ajax进行服务器验证
struts2 客户端验证
struts2服务端验证
Java动态代理的一个例子
Struts2的拦截器
Struts2文件的上传
struts2类型转换
用moodle构造课程学习网站
xml shema
初试Java对象的序列化
<
2008年10月
>
日
一
二
三
四
五
六
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
留言簿
(2)
给我留言
查看公开留言
查看私人留言
搜索
最新随笔
1. struts2 客户端验证
2. Struts2整合Spring
3. Java动态代理的一个例子
4. Struts2的拦截器
5. Struts2文件的上传
6. 在D630上安装了Ubuntu 8.04.1
7. struts2类型转换
8. 用moodle构造课程学习网站
9. java虚拟机常用参数详解
10. 初试Java RMI
最新评论
1. 111
111
--11
2. re: 在struts2中利用ajax进行服务器验证[未登录]
啊啊
--啊
3. re: 在struts2中利用ajax进行服务器验证[未登录]
谢谢你了。。。。。。
--皮皮
4. re: struts2 客户端验证
为什么会抛出异常???
--永恒的兴
5. re: 用moodle构造课程学习网站
谁能给个汽修学习网站!
--..