Skynet
posts - 165, comments - 198, trackbacks - 0, articles - 1
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
为我学习 Spring AOP 准备(Proxy)
Posted on 2007-10-09 11:13
G_G
阅读(1109)
评论(2)
编辑
收藏
所属分类:
Spring
为我准备学习和理解spring
特留下代码笔记:
参考:
http://dev.csdn.net/author/labile/e70c97cb7f504d35b7b5350e7810cc5a.html
代码感想:
没个方法都或多或少需要环境参数(如: jdbc的conn ,hbn的session...等等 ),方法结束后又要关闭。
何不用proxy代理并用配置文件的方法来 关,开session 等
如:
以下是我的想法并不是实际可用
配置:
<
class
name
="
HelloWorldImpl
"
>
<
function
name
="set*"
/>
<
function
name
="getName"
>
<
proxyBegin artt="name"
value
="liukaiyi"
/>
//使用Proxy来赋值 name那在实现代码中就可以不用去关注象 session 等属性的开关了
//proxy中配置下 , 在实现类中 就使用 就可以了
<
proxyBegin
ref
="HelloWorldHandler.doBefter"
args
="null"
/>
<
proxyEnd
ref
="HelloWorldHandler.doAfter"
args
="null"
/>
</
function
>
<
function
= name="sayHelloWorld">
<proxyEnd ref
="HelloWorldHandler.doAfter"
args
="null"
/>
</
function
>
</
class
>
代码:
HelloWorld hw =
(
HelloWorld
)Factory.getBean(
"HelloWorldImpl"
);
hw.getName();
结果是:
before method invoke!
刘凯毅
after method invoke!
在此 我只是想象,spring 还没有看,但我认为spring 这个著名的框架应该在这方面有很好的实现。
实际代码:
希望spring可以向我上面的方法配置好用来取代下面的实际代码 ^_^
package
test.proxy;
import
java.lang.reflect.InvocationHandler;
import
java.lang.reflect.Method;
import
java.lang.reflect.Proxy;
import
junit.framework.TestCase;
public
class
TestProxy
extends
TestCase {
protected
void
setUp()
throws
Exception {
super
.setUp();
}
public
void
testProxy(){
HelloWorld hw
=
new
HelloWorldImpl();
InvocationHandler handler
=
new
HelloWorldHandler(hw);
HelloWorld proxy
=
(HelloWorld) Proxy.newProxyInstance(
hw.getClass().getClassLoader(),
hw.getClass().getInterfaces(),
handler);
proxy.sayHelloWorld();
System.out.println();
proxy.setName(
"
liukaiyi
"
);
proxy.getName();
}
}
interface
HelloWorld {
void
sayHelloWorld() ;
void
getName();
void
setName(String name);
}
class
HelloWorldImpl
implements
HelloWorld {
private
String name
=
""
;
public
void
setName(String name) {
this
.name
=
name;
}
public
void
sayHelloWorld() {
System.out.println(
"
Hello World!
"
);
}
public
void
getName() {
System.out.println(
this
.name);
}
}
class
HelloWorldHandler
implements
InvocationHandler {
//
要代理的原始对象
private
Object objOriginal;
/**
* 构造函数。
*
@param
obj 要代理的原始对象。
*/
public
HelloWorldHandler(Object obj) {
this
.objOriginal
=
obj ;
}
public
Object invoke(Object proxy, Method method, Object[] args)
throws
Throwable {
Object result
=
null
;
String meName
=
method.getName();
if
(meName.indexOf(
"
set
"
)
>-
1
){
return
method.invoke(
this
.objOriginal ,args);
}
if
( meName.equals(
"
getName
"
) ){
//
方法调用之前
doBefore();
//
仿佛是AOP的影子,呵呵
}
//
调用原始对象的方法
result
=
method.invoke(
this
.objOriginal ,args);
//
方法调用之后
doAfter();
return
result ;
}
private
void
doBefore() {
System.out.println(
"
before method invoke!
"
);
}
private
void
doAfter() {
System.out.println(
"
after method invoke!
"
);
}
}
结果:
Hello World!
after method invoke!
before method invoke!
刘凯毅
after method invoke!
评论
#
re: 为我学习 Spring AOP 准备(Proxy)
回复
更多评论
2007-10-09 12:05 by
千里冰封
呵呵,用代理还是比较好玩的
#
re: 为我学习 Spring AOP 准备(Proxy)
回复
更多评论
2008-03-13 18:14 by
bless
要是很多不同的被代理类的函数返回值、里面的判断条件等等的好多种,很复杂,那invoke里岂不是要写很多判断条件,那时候怎么办啊。
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
spring 与 hibernate 整合(事务)
spring AspectJ 基本使用
spring 学习笔记
为我学习 Spring AOP 准备(Proxy)
Powered by:
BlogJava
Copyright © G_G
日历
<
2007年10月
>
日
一
二
三
四
五
六
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
9
10
公告
由于时间问题,
blog上一些表达都不太好。
在此我尽量把我参考的原文给大家,
与大家学习。^_^
最近在维护www.blogjava.net\Skynet 脚本中
有什么技术问题不会,
我很愿意和大家讨论!
多交流快成长
liukaiyi@gmail.com
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(13)
给我留言
查看公开留言
查看私人留言
随笔分类
ant(6)
AOP(5)
Database(9)
E_Study(3)
EJB(4)
hibernate(25)
HTML(4)
Inspiration(11)
Jakarta Commons(3)
javaGeneral(28)
javascript(28)
javascript Framework(7)
JDBC(5)
json(3)
JspTag(12)
JUnit(8)
Other(5)
Reportform(3)
Spring(4)
struct(5)
Swing(1)
xml Related(7)
随笔档案
2009年4月 (1)
2009年2月 (2)
2009年1月 (1)
2008年12月 (4)
2008年11月 (1)
2008年9月 (7)
2008年8月 (8)
2008年7月 (12)
2008年6月 (9)
2008年5月 (5)
2008年4月 (11)
2008年3月 (6)
2008年1月 (8)
2007年12月 (13)
2007年11月 (13)
2007年10月 (15)
2007年9月 (11)
2007年8月 (9)
2007年7月 (7)
2007年6月 (6)
2007年5月 (3)
2007年4月 (9)
文章档案
2007年4月 (1)
相册
EJB
hbn
ss
wz
hibernate
cjdbc
hibernate.cache
Hibernate中outer-join、lazy 、fetch join关键字的使用
My连接
一个读取Gmail邮件的简单程序
bat 1%
eXtremeTable limit
java+web
jsp java javascrip 交互
JS函数集合大全
strut c:
Struts Menu
tree jsp
上手JFreeChart
关键笔记
根据name调用getName方法
用JAVA实现一个分页类
搜索
最新评论
1. re: 序列化和反序列化对象到 数据库
qwe
--erwqe
2. re: 部分高级查询 sql 拼写笔记 (mysql)
说实话,写的的的确是差了那么一点点
--老衲用飘柔
3. re: html 简单 div 拖动
好。
--火星华人
4. re: hibernate 多服务器数据同步问题(支持延迟同步)
评论内容较长,点击标题查看
--张久强
5. re: 数据库表地址数据(中国地区)
谢谢分享,收藏了!
--久久快乐鲜花
阅读排行榜
1. google svn 服务器使用(14258)
2. mysql 权限控制笔记(11664)
3. mysql 游标使用(7112)
4. 强大的 ant scp 和 sshexec (6380)
5. CGLib 学习(5771)
评论排行榜
1. hibernate 多服务器数据同步问题(支持延迟同步)(12)
2. 部分高级查询 sql 拼写笔记 (mysql)(9)
3. 为在平安夜还在加班的程序员祝福!(8)
4. 原创小框架: 动态面向对象数据库操作(不要影射类哦)(6)
5. 自用小框架:DB工厂(6)