关于选择Spring还是Google-Guice的一些想法

原创 2012年01月22日 13:23:07

Spring已经出来好多年了,当年是作为轻量级J2EE容器和EJB抗衡的,不过随着技术和时间的发展,Spring越来越全面,越来越强大,也就越来越Heavy了。而且,在使用Spring的过程中,因为所有Bean直接的关联都是在XML配置文件中完成的,于是当系统变大之后,XML配置中的内容会非常的多,感觉会很乱。

Google-Guice是最近几年刚刚出来的一种DI框架,它的好处就是简单,轻量级,快。Guice中的Bean之间的关联都是在Module中定义的,如果需要定义不同的关联,则需要定义不同的Module,这点相对来说会麻烦一些,但是这种使用Annotation和Module的方式,对于程序员来说,可能会感觉更为直接。另外,Guice启动的时候比Spring要快很多,据说要快100倍,这主要是因为Spring要去读配置文件,要Parse XML文件。但是个人感觉这种快,其实作用有限,因为这种速度的差异,只是在load Bean的时候,当Bean都已经被load到内存之后,其实就没什么差别了,所以Guice快只是快在启动阶段。


关于在做项目时,到底选择Spring还是选择Guice呢? 个人感觉,如果你原来一直在使用Spring或者Guice,那么其实完全没有必要换,因为这样会带来额外的复杂度。原来熟悉那个用那个就OK了。 如果Spring和Guice都没用过,或者说都用过,那么我觉得就看项目需要了,如果项目需要的仅仅是个DI容器,那么我觉得Guice就足够了,好处就是简单,上手快,启动快;如果项目需要更多功能,要和其他的框架进行兼容,那么个人感觉选择Spring仍然是不错的选择,比较Spring出道时间长,和很多成熟框架之间都有很好的兼容,虽然Guice新的版本已经可以支持AOP功能,并且也可以支持和一些其他框架进行兼容,但是Guice想要在短时间内取代Spring,个人感觉还是非常难的。


最后,转一个看到的Spring和Guice的对比,转自:http://blog.csdn.net/lixuehui/article/details/1559926


Guice与Spring的对比
  Spring Guice
使用XML 使用将类与类之间的关系隔离到xml中,由容器负责注入被调用的对象,因此叫做依赖注入 不使用xml,将类与类之间的关系隔离到Module中,声名何处需要注入,由容器根据Module里的描述,注入被调用的对象。
使用Annotation   使用
支持自定义Annotation标注,对于相同的接口定义的对象引用,为它们标注上不同的自定义Annotation注释,就可以达到同一个类里边的同一个接口的引用,注射给不同的实现,在Module里用标注做区分,灵活性大大增加。
使用Annotation也未必是好事,范型等新特性也未必是好事,目前大多的服务器均不支持jdk1.5,wls要9以前才支持,而目前的客户由于价格原因也很少选用wls9的,至少我们做过的项目中都没有。功能再强,客户不需要,何用?
运行效率 装载spring配置文件时,需解析xml,效率低,getBean效率也不高,不过使用环境不会涉及到getBean,只有生产环境的时候会用到getBean,在装载spring应用程序的时候,已经完成全部的注射,所以这个低效率的问题不是问题。 使用Annotation,cglib, 效率高与spring最明显的一个区别,spring是在装载spring配置文件的时候把该注入的地方都注入完,而Guice呢,则是在使用的时候去注射,运行效率和灵活性高。
类耦合度 耦合度低,强调类非侵入,以外部化的方式处理依赖关系,类里边是很干净的,在配置文件里做文章,对类的依赖性极低。 高,代码级的标注,DI标记@inject侵入代码中,耦合到了类层面上来,何止侵入,简直侵略,代码耦合了过多guice的东西,大大背离了依赖注入的初衷,对于代码的可维护性,可读性均不利
类编写时 需要编写xml,配置Bean,配置注入 只需声明为@inject,等着被注入,
最后在统一的Module里声明注入方式
仅支持IOC 否,spring目前已经涉猎很多部分 是,目前仅仅是个DI容器
是否易于代码重构 统一的xml配置入口,更改容易 配置工作是在Module里进行,和spring异曲同功
支持多种注入方式 构造器,setter方法 Field,构造器,setter方法
灵活性  

1,如果同一个接口定义的引用需要注入不同的实现,就要编写不同的Module,烦琐

2,动态注入

如果你想注射的一个实现,你还未知呢,怎么办呢,spring是没办法,事先在配置文件里写死的,而Guice就可以做到,就是说我想注射的这个对象我还不知道注射给谁呢,是在运行时才能得到的的这个接口的实现,所以这就大大提高了依赖注射的灵活性,动态注射。

与现有框架集成度 1, 高,众多现有优秀的框架(如struts1.x等)均提供了spring的集成入口,而且spring已经不仅仅是依赖注入,包括众多方面。
2, Spring也提供了对Hibernate等的集成,可大大简化开发难度。
3, 提供对于orm,rmi,webservice等等接口众多,体系庞大。
1,可以与现有框架集成,不过仅仅依靠一个效率稍高的DI,就想取代spring的地位,有点难度。
配置复杂度 在xml中定位类与类之间的关系,难度低 代码级定位类与类之间的关系,难度稍高

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

史上最简单的 SpringCloud 教程 | 终章

错过了这一篇,你可能再也学不会 Spring Cloud 了!Spring Boot做为下一代 web 框架,Spring Cloud 作为最新最火的微服务的翘楚,你还有什么理由拒绝。赶快上船吧,老船...
  • forezp
  • forezp
  • 2017-04-12 23:14
  • 134143

史上最简单的 SpringCloud 教程 | 第十四篇: 服务注册(consul)

这篇文章主要介绍 spring cloud consul 组件,它是一个提供服务发现和配置的工具。consul具有分布式、高可用、高扩展性。一、consul 简介consul 具有以下性质:服务发现:...
  • forezp
  • forezp
  • 2017-04-19 21:37
  • 17389

Google Guice 与 Spring 的区别

Guice与Spring的对比   Spring Guice 使用XML 使用将类与类之间的关系隔离到xml中,由容器负责注入被调用的对象,因此叫做依赖注入 不使用xm...

Yahoo! s4和Twitter storm的粗略比较

转自:http://www.blogjava.net/killme2008/archive/2011/11/10/363238.html ------------------------------...

Spring 动态注入javaBean

在项目中有时会有这样的需求:要求在程序运行时动态注入javaBean,显然新加的Bean不能写在Spring的配置文件中。 因为配置文件修改后需要重启服务器。还好spring为我们提供了动态注入bea...

Google Guice - 轻量级 DI 依赖注入框架

Guice简单使用 示例代码 Anddd7/Demo-Guice 参考了 博客 - Google Guice 系列教程 和 Github - greengerong/guice-demo...

Google-Guice入门介绍

一. 概述 Guice是一个轻量级的DI框架。本文对Guice的基本用法作以介绍。 本文的所有例子基于Guice 3.0 本文的很多代码来源于Guice主页:http://code.goog...

Google Guice 系列教程 - 基础实践

前言 Google Guice 是一个轻量级的依赖注入框架,它支持Java 5或者更高版本的JDK,得利于Java 5中提供的泛型 (Generics) 和注释 (Annotations) ,它...

Google Guice入门教程

Google Guice 是一个轻量级的依赖注入框架,它支持Java 5或者更高版本的JDK,得利于Java 5中提供的泛型 (Generics) 和注解 (Annotations) ,它可以使得代码...

RoboGuice 解析

背景: 网上都是浅层次的使用说明,即使是作为供他人使用的接口说明也是不合格 的,所以还是得看看源码。进入到RoboFragment中,在onCreate中final RoboInjector in...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)