Spring框架

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

同时也要注意到:Spring框架类似“杂烩”,它包含了很多J2EE应用的工具,类如对EJB的调用,它的MVC与Struts JSF也是相竞争的,以纯Ioc和AOP设计来说,Spring框架也是一种很重的(Heavy、Weight)框架。Spring框架是复杂的,如果想以 Spring替代EJB,那么无疑按了葫芦浮起瓢。 在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确实是Ioc和AOP的完美应用,Ioc用来装载JavaBeans,创建这些对象;AOP用来拦截这些对象的使用.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值