Skynet
posts - 138, comments - 150, trackbacks - 0, articles - 1
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
为我学习 Spring AOP 准备(Proxy)
Posted on 2007-10-09 11:13
G_G
阅读(652)
评论(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!
Feedback
#
re: 为我学习 Spring AOP 准备(Proxy)
回复
更多评论
2007-10-09 12:05 by
千里冰封
呵呵,用代理还是比较好玩的
#
re: 为我学习 Spring AOP 准备(Proxy)
回复
更多评论
2008-03-13 18:14 by
bless
要是很多不同的被代理类的函数返回值、里面的判断条件等等的好多种,很复杂,那invoke里岂不是要写很多判断条件,那时候怎么办啊。
新闻频道
新用户注册
刷新评论列表
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子博客
管理
相关文章:
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上一些表达都不太好。
在此我尽量把我参考的原文给大家,
帮助大家学习。^_^
有什么技术问题不会,
我很愿意和大家讨论!
多交流快成长
liukaiyi@gmail.com
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(6)
给我留言
查看公开留言
查看私人留言
随笔分类
ant(5)
AOP(5)
Database(8)
E_Study(1)
EJB(4)
hibernate(23)
HTML(3)
Inspiration(9)
Jakarta Commons(3)
javaGeneral(22)
javascript(19)
javascript Framework(7)
JDBC(5)
json(3)
JspTag(7)
JUnit(7)
Other(3)
Reportform(3)
Spring(4)
struct(4)
Swing(1)
xml Related(7)
随笔档案
2008年7月 (9)
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: 实用,简单 ibatis dome (包含多对一;一对多)[未登录]
评论内容较长,点击标题查看
--JAVAFANS
2. re: 实用,简单 ibatis dome (包含多对一;一对多)
评论内容较长,点击标题查看
--JAVAFAN
3. re: 我的 ssh demo
文件下载路径以修改
--G_G
4. re: 我的 ssh demo
下不了啊,lsqlister@gmail.com
--lsqlister
5. re: 我的 ssh demo
下不了,请发到我的邮箱里好吗?谢谢TIANYXI@126.COM
--TYXING
阅读排行榜
1. select集连+xml+选择提交 (Ajax局部刷新) (1836)
2. CGLib 学习(1589)
3. WEB xml 画图 (javascript包装)用到 prototype.js wz_jsgraphics.js (1558)
4. google svn 服务器使用(1540)
5. json 使用(1522)
评论排行榜
1. hibernate 多服务器数据同步问题(支持延迟同步)(10)
2. 为在平安夜还在加班的程序员祝福!(8)
3. 权限设计的探讨阅读后感(6)
4. dom4j 学习(6)
5. Ajax uri 乱码问题总结(IE,FF)(6)
60天内阅读排行
1. google svn 服务器使用(1540)
2. Hibernate 数据库设计_1(1306)
3. mysql 树形结构数据收集(存储过程)(1211)
4. scilab 工具使用(1115)
5. java xml basex 数据库(1062)