- 浏览: 21717 次
- 性别:
- 来自: 杭州
最新评论
没有一种新技术是凭空诞生的,它的萌芽或胚胎总是或多或少显现于以前的技术中,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,但是是否有权限访问呢?如下图:
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管理下的对象的调用。如下图:
以上只是大体解构了Spring的架构,Spring框架在这个架构下,还顺带了很多其它功能,如Web MVC、 DAO JDBC、 DAO ORM 、以及remote,后者类似我设计的EJB方法调用框架。
总之,Spring确实是Ioc和AOP的完美应用,Ioc用来装载JavaBeans,创建这些对象;AOP用来拦截这些对象的使用,这才是框架设计的必然经典方式。
发表评论
-
Java反射Reflection--运行时生成instance
2009-11-18 10:17 1367文章来自: 博客浙江(blog.zj.com) 原文参考:ht ... -
Java反射经典实例 Java Reflection
2009-11-18 10:12 786http://jeplove.blog.zj.com/blog ... -
JProfiler试用手记
2009-04-13 16:00 845JProfiler是一款Java的性能监控工具。可以查看当前应 ... -
优化SQL的另一种思维1 性能调整综述
2009-04-12 17:34 1307作者: Peak Wong, 出处:IT专家网, 责任编辑: ... -
利用Oracle 10g SQL优化器(STA)优化语句(1)
2009-04-12 16:57 1815作者: fuyuncat 来源: w ... -
JAVA基础--JAVA中的反射机制详解
2009-02-25 22:41 783JAVA反射机制 JAVA反射机制是在运行状态中,对于任 ... -
Java中int和Integer的区别详解
2009-02-23 21:18 1176Java中int和Integer关系是比较微妙的。关系如下: ... -
Portal(门户)是什么--IT术语
2009-02-23 21:12 3132Portal 的组成可以分为 ... -
StringBuilder类
2009-02-20 21:40 13281.3 StringBuilder类 一个String对象 ... -
Java的内存泄漏
2009-02-20 18:13 797一 问题的提出 Java ... -
JDK核心API:Java1.5语言新特性简单总结
2009-02-20 18:05 10271. 自动装箱与拆箱 对应C# 例1.1 ... -
优秀Java程序员必须了解GC的工作原理
2009-02-20 17:57 898一个优秀的Java程序员必 ... -
转:大型互联网网站架构心得之一
2009-02-06 22:10 1143我们知道,对于一个大 ... -
一 CVS服务器的安装:
2008-12-28 18:43 1392一 CVS服务器的安装: 1。查看你的操作系统上是否安装了C ... -
开源技术分析:AOP和Spring事务处理
2008-12-27 22:01 797一.为什么要用框架 ...
相关推荐
在JavaEE的学习过程中,有两个著名的示例项目,即PetStore和Jive论坛,这两个项目都是JavaEE开发的经典案例,有助于初学者理解并掌握JavaEE的核心概念和技术。 PetStore项目: 1. **MVC设计模式**:PetStore项目...
同时,理解MVC设计模式和Spring框架对Jive的开发大有裨益。 2. **数据库设计与管理**:Jive依赖于关系型数据库(如MySQL或Oracle)存储数据,你需要熟悉SQL语言和数据库设计原则。Jive的安装过程中,会涉及到数据库...
此外,Jive可能还使用了如Spring框架来管理和控制业务逻辑,以及Hibernate或MyBatis等持久层框架来操作数据库,实现数据的增删改查。 在描述中提到的“不同类型的用户管理论坛和编辑帖子”,意味着Jive提供了多级别...
除了设计模式,Jive源代码还可能包含对Java核心库和框架的高级使用,如Spring框架的依赖注入,Hibernate的持久化操作,以及Servlet和JSP的Web开发技术。通过分析这些代码,你可以提升对Java Web开发的理解。 1. **...
4. **库文件**:包含Jive依赖的第三方库,如Spring、Hibernate等,这些库为Jive提供了框架支持和服务功能。 5. **构建脚本**:例如Ant或Maven脚本,用于编译源代码、打包和部署Jive应用。 对于初学者,理解Jive 2.5...
其基于Java技术栈,利用Spring框架进行依赖注入,提供服务层和业务逻辑,同时结合Hibernate进行持久层操作,确保了数据的高效管理和存储。 2. **用户接口**:Jive的用户界面通常由HTML、CSS和JavaScript构建,使用...
"Matrix: Jive API + Neo4j + Spring启动"项目就是这样一个示例,它巧妙地结合了Jive API、图数据库Neo4j以及Spring框架,构建了一个具有强大功能的应用。本文将深入探讨这三个关键技术的融合及其在项目中的应用。 ...
WebWork2与Spring框架的结合,进一步增强了WebWork的应用潜力。Spring提供了依赖注入(DI)和面向切面编程(AOP)的支持,使得WebWork中的组件能够更方便地进行配置和管理。通过将WebWork的Action与Spring的Bean容器...
Webwork2与Spring框架有着良好的集成性,可以无缝地结合使用。Spring的依赖注入(DI)和面向切面编程(AOP)功能可以增强Webwork2的灵活性和模块化程度,使得复杂的应用架构变得更加清晰和易于管理。 #### 三、Webwork2...
8. **持续集成与版本管理**:为了确保代码的质量和可维护性,推荐使用Git进行版本控制,并结合Jenkins等工具实现持续集成,自动化构建和部署。 在提供的链接中,博主ibm_hoojo分享了具体的步骤和示例代码,这对于...
通过阅读和分析开源项目,如jive论坛、Sun公司的petstore和dune,能够加深对J2EE的理解和实践。 J2EE的其他学习内容包括但不限于Struts、Hibernate等框架。Struts提供MVC(模型-视图-控制器)架构,简化Web应用开发...
例如,Spring框架和Hibernate框架已经成为现代Java Web开发中非常流行的选择。因此,在学习J2EE的同时,也应该保持对新技术的关注,以便能够跟上技术发展的步伐。 #### 七、总结 学习J2EE是一个长期的过程,需要...
掌握Spring框架、了解DevOps流程、熟悉微服务设计原则,这些都是现代Java开发者的必备技能。 同时,持续关注最新的Java版本特性,如模块系统、局部变量类型推断、新流API等,可以让你的代码更加高效、简洁。此外,...
由于是基于Java的系统,开发者可以利用丰富的Java库和框架进行功能扩展或定制,如Spring、MyBatis等。 总结来说,jspshop网络购物系统(Oracle版)共享版是一个全面的电商解决方案,结合了Java技术的灵活性和...
此外,还有各种技术论坛和博客,如**ChinaJavaWorld 技术论坛**、**JavaWorld 技术论坛**、**Java视线论坛**、**J道论坛**、**Sun技术社区论坛**、**中国Java开发网**、**SpringFramework中文论坛**、**Jive研究论坛...
2. **MVC框架实践**:例如Struts框架的应用,可以帮助你理解MVC设计模式在Web开发中的运用。 3. **重构实践**:通过阅读《重构》这本书,并结合实际项目进行重构练习,可以提升代码质量和维护性。 #### 五、持续...