分享
 
 
 

Jive论坛与Spring框架的经典结合

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

没有一种新技术是凭空诞生的,它的萌芽或胚胎总是或多或少显现于以前的技术中,Jive论坛是大家潜心研究的设计型应用程序,其相关解析可见本栏的GoF设计模式专栏。

Jive和SPRing同为由javaBeans组成的J2EE Web系统,Jive作为早期成功设计案例,其主要架构成为大多数纯JavaBeans系统的流行架构,Spring也不例外。

Spring框架除了是一种Web层应用框架,还提供了访问EJB层的接口,也有JDBC/ORM的直接操作。Spring框架主要魅力是使用IoC模式和AOP实现了Jive系统的通用功能,从而使得Jive这样的纯JavaBeans架构设计可以重用在其它系统中。

假如你感慨于Jive的设计理念,但是又苦于无法重用其设计时,Spring框架已经帮你实现了。

同时也要注重到:Spring框架类似“杂烩”,它包含了很多J2EE应用的工具,类如对EJB的调用,它的MVC与Struts JSF也是相竞争的,以纯Ioc和AOP设计来说,Spring框架也是一种很重的(Heavy、Weight)框架。Spring框架是复杂的,假如想以Spring替代EJB,那么无疑按了葫芦浮起瓢。

将Jive论坛和Spring框架联系起来,会帮助更多理解设计模式的程序员迅速把握最新的设计思潮,而不是一种跳跃式的强迫接受。假如你对Jive有很好的研究,将会发现Spring框架是Jive设计的更加通用的提升。

在Jive中,ForumFactory是整个系统的入口和突破点,Jive通过ForumFactory将整个系统掌控在一个工厂模式下,这样做的好处是:便于控制系统的JavaBeans,例如,客户端通过ForumFactory可创建一个Forum或访问一个Forum,但是是否有权限访问呢?如下图:

<center

</center

Jive通过ForumFactory将这种访问引导到相应的Proxy类去,如ForumFactoryProxy类等,通过代理模式对这些类进行权限控制访问。这是代理模式的一个主要用处,但是研读Jive的代理模式会发现,要为每个类实现一个Proxy类,非常琐碎,有没有更优雅的方式呢? 当然使用动态代理。

Spring框架基本是抽象上述设计,Spring框架对所有JavaBeans的治理也是基于一个总入口Bean Factory机制,不同的是,BeanFactory可以 治理所有应用的JavaBeans,使用者只要将自己的JavaBeans通过配置文件告诉BeanFactory,那么BeanFactory将会加载这些JavaBeans,例如:

<beans

<bean id="exampleBean" class="eg.ExampleBean"/

<bean id="anotherExample" class="eg.ExampleBeanTwo"/

</beans

在Jive中,ForumFactory加载Jive自己的JavaBeans是通过工厂实现DbForumFactory实现的,如下代码,DbForumFactory引发了后台一系列功能实现,这是纵向,而return new ForumFactoryProxy这个语句则类似引来一个切面,从一个横向方面实现了权限访问等功能:

private static String className = "com.jivesoftware.forum.database.DbForumFactory";

public static ForumFactory getInstance(Authorization authorization) {

//If no valid authorization passed in, return null.

if (authorization == null) {

return null;

}

//以下使用了Singleton 单态模式

if (factory == null) {

synchronized(initLock) {

if (factory == null) {

......

try {

//动态转载类

Class c = Class.forName(className);

factory = (ForumFactory)c.newInstance();

}

catch (Exception e) {

return null;

}

}

}

}

//Now, 返回 proxy.用来限制授权对forum的访问

return new ForumFactoryProxy(authorization, factory, factory.getPermissions(authorization));

}

既然Spring框架也是通过一个Bean Factory加载所有的类,那么它是如何加载的?通过IoC模式,也就是依靠性注射模式。在我以前文章“IoC模式”中,我比较了Factory工厂模式创建对象和Ioc模式的注射对象实现之间的异同,Ioc相比工厂模式则更加解耦了调用者和被调用者之间关系,使用Ioc模式,无需在调用者代码中涉及被调用者的具体实现。

Spring框架不但可以向自己容器中注射应用者自己定义的JavaBeans(也就是创建它们),而且也可以向这些JavaBeans通过set方法实现数据赋值。

一旦Bean Factory运行时刻掌管这些激活的对象,Spring通过AOP方式,从一个横切面为这些JavaBeans提供了权限访问、事务锁等通用功能的实现,这种实现是基于动态代理模式,而动态代理是AOP实现的一种方式。

前面提到,Jive中使用代理模式实现权限访问,比代理模式更加简洁和抽象的是动态代理,使用动态代理将使得调用者无需指定被调用者的代理类,这是动态代理区别代理模式的本质。

动态代理这一优势,又可以体现在另外一句话语上:动态代理拦截了调用者对被调用者的调用,正是这一功能符合了AOP的拦截器功能,为AOP实现提供了可能。

Spring框架使用了动态代理实现的AOP,正是通过动态代理机制拦截了外界对Bean Factory治理下的对象的调用。如下图:

<center

</center

以上只是大体解构了Spring的架构,Spring框架在这个架构下,还顺带了很多其它功能,如Web MVC、 DAO JDBC、 DAO ORM 、以及remote,后者类似我设计的EJB方法调用框架。

总之,Spring确实是Ioc和AOP的完美应用,Ioc用来装载JavaBeans,创建这些对象;AOP用来拦截这些对象的使用,这才是框架设计的必然经典方式。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有