Java下的框架编程(5)
反射、Proxy和元数据是Java最强的三个特征,再加上CGLib (Code Generation Library)
和ASM,使得Java虽然没有Ruby,Python般后生可畏,一样能做出强悍的框架。
Proxy
可以看作是微型的AOP,明白提供了在继承和委托之外的第三个代码封装途径,只要有足够的想象力,可以做得非常好玩,Spring的源码里用Proxy就
用得很随便,看得我非常眼红。可惜Proxy必须基于接口。因此Spring的做法,基于接口的用proxy,否则就用cglib。AOP么,一般小事非
compoent一级的就不麻烦AspectJ出手了。
cglib的Enhancer说起来神奇,用起来一页纸不到就讲完了。
它的原理就是用Enhancer生成一个原有类的子类,并且设置好callback到proxy, 则原有类的每个方法调用都会转为调用实现了MethodInterceptor接口的proxy的intercept() 函数:
public
Object intercept(Object o,Method method,Object[] args,MethodProxy proxy)
在
intercept()函数里,你可以在执行Object
result=proxy.invokeSuper(o,args);来执行原有函数,在执行前后加入自己的东西,改变它的参数值,也可以瞒天过海,完全
干别的。说白了,就是AOP中的around advice。
AOP没有出现以前,该领域经典的设计模式是Decorator,像Java IO Stream的设计就是如此.不过,如果为每个DAO, 每个方法的写Decorator函数会写死人的,所以用上cglib的好处是一次过拦截所有方法。
另外,cglib除了Enhancer之外,还有BulkBean和Transform,都是Hibernate持久化的基础,但文档贫乏,一时还没去看怎么用。
1.AOP里讲了一百遍阿一百遍的log aspect在cglib是这样做的:
public
class
LogDAOProxy
implements
MethodInterceptor
{
private
Logger log
=
Logger.getLogger(LogDAOProxy.
class
);
private
Enhancer enhancer
=
new
Enhancer();
//
返回DAO的子类
public
Object getDAO(Class&nb
相关文档:
create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
......
尽管云计算这一术语并不新鲜(Amazon在2006年就开始提供它的云服务),但从2008年起它才开始真正成为流行词,这期间,Google和
Amazon的云服务逐渐获得了公众的关注。 Google的App Engine使用户能够在Google基础设施上构建和托管 Web 应用程序。
连同S3,AmazonWeb Services还包括Elastic Cloud Compute
(EC2) ......
/**
SimpleDateFormat函数语法:
G 年代标志符
y 年
M 月
d 日
h 时 在上午或下午 (1~12)
H 时 在一天中 (0~23)
m 分
s 秒
S 毫秒
E 星期
D 一年中的第几天
F 一月中第几个星期几
w 一年 ......
1、面向对象的特征有哪些方面
1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联结类的层次模型,并且允许和鼓 ......
十年前,Sun微系统公司将Java搬到了世人面前,这是首次协助企业建立具有前瞻性的思想的一款软件,随后Java迅猛扩散,深入到计算机业的几乎每个角落。这项技术的幕后英雄,就是本文采访的James Gosling。
上个世纪90年代初,Gosling发起并领导了一个名为Green的项目,此项目最终演变为Java。Java 的基本理念是创造一种可以 ......