`
wbj0110
  • 浏览: 1601054 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Guice整合Struts2简易教程

阅读更多

 

1. 简介

  Guice是Google推出的一款DI框架,因其优秀荣获了Jolt大奖。和Spring相比,要轻量很多。运行时只要指定一个配置类,实现其com.google.inject.Module接口,指定接口和实现类即可。

  需要的基础jar包有

  Guice需要的jar包,如果是web应用,需要guice-servlet-2.0.jar,整合Struts2则需要guice-struts2-plugin-2.0.jar

  aopalliance.jar

  guice-2.0.jar

  guice-servlet-2.0.jar

  guice-struts2-plugin-2.0.jar

Struts2需要的jar包

  commons-fileupload-1.2.1.jar

  commons-io-1.3.2.jar

  commons-logging-1.0.4.jar

  freemarker-2.3.13.jar

  ognl-2.6.11.jar

  struts2-core-2.1.6.jar

  xwork-2.1.2.jar

 

 

GuiceSpring的对比

 

Spring

Guice

使用XML

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

不使用xml,将类与类之间的关系隔离到Module中,声名何处需要注入,由容器根据Module里的描述,注入被调用的对象。

使用Annotation

 

使用
支持自定义Annotation标注,对于相同的接口定义的对象引用,为它们标注上不同的自定义Annotation注释,就可以达到同一个类里边的同一个接口的引用,注射给不同的实现,在Module里用标注做区分,灵活性大大增加。
使用Annotation也未必是好事,范型等新特性也未必是好事,目前大多的服务器均不支持jdk1.5,wls9以前才支持,而目前的客户由于价格原因也很少选用wls9的,至少我们做过的项目中都没有。功能再强,客户不需要,何用?

运行效率

装载spring配置文件时,需解析xml,效率低,getBean效率也不高,不过使用环境不会涉及到getBean,只有生产环境的时候会用到getBean,在装载spring应用程序的时候,已经完成全部的注射,所以这个低效率的问题不是问题。

使用Annotationcglib, 效率高与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中定位类与类之间的关系,难度低

代码级定位类与类之间的关系,难度稍高

 

2. Helloworld

  笔者写了一个demo,对于简单的应用Guice还是比Spring方便很多

  └─com

  └─greysh

  └─guice

  ├─action

  │ UserAction.java

  │

  ├─config

  │ ModuleConfig.java

  │

  ├─model

  │ User.java

  │

  └─service

  │ UserService.java

  │

  └─impl

  UserServiceImpl.java

Guie加载的原理是先去调用自己实现Module接口的类,这个类类似Spring的applicationcontext.然后调用configure函数的binder进行绑定,相当于spring里面的ref绑定,然后绑定完后就在需要注入的放指定 @Inject 进行注入,主要有构造函数注入,方法注入,字段注入。一般而言用方法注入

  本教程的User为实体类,仅仅有一个字段userName

public interface UserService {

  void invoke(User user);

  }

  对于接口实现  

public void invoke(User user) {

  user.setUserName(
\"Name : \" + user.getUserName());

  当然最重要的是action  

@Inject
private UserService userService;
@Inject
private User user;

  本教程采用字段注入,由于不采用Struts2的自身的DI,因此要指定为guice

<constant name=\"struts.objecsFactory\" value=\"guice\" />
<constant name=\"struts.i18n.encoding\" value=\"utf8\" />
<constant name=\"guice.module\" value=\"com.greysh.guice.config.ModuleConfig\" />
分享到:
评论

相关推荐

    Struts2与Guice(Guice3.0、Struts2.x)的整合(附demo)

    总结,Struts2与Guice的整合是一种优化Java Web应用设计的方式,它利用了依赖注入的优势,降低了组件间的耦合度,提高了代码的可读性和可测试性。通过具体的配置和编程实践,我们可以有效地将这两个框架结合在一起,...

    struts2 整合guice

    将Struts2与Guice整合可以充分利用Guice的依赖注入特性,提高Struts2应用的可测试性和模块化。 整合Struts2和Guice,首先需要在项目中引入Guice的依赖库。这通常通过在pom.xml(如果你使用的是Maven)或者build....

    Struts2的第一个入门实例(三)--Struts2与Guice整合

    在本实例中,我们将深入探讨如何将Google的依赖注入框架Guice与Struts2整合,以实现更高效、更灵活的代码管理。 在Java Web开发中,依赖注入(DI)是一种设计模式,它可以帮助我们降低组件之间的耦合,使得测试和...

    guice3 + struts2.2 整合

    整合Guice3与Struts2.2的目标是利用Guice的依赖注入能力来增强Struts2的组件管理。以下是一些关键步骤: 1. **添加依赖**:在项目中,你需要引入Guice和Struts2的JAR包。对于Guice3,这通常包括guice、guice-...

    Guice+Struts2+warp-persist 简单实例

    借助Guice+Struts2+Warp-persist来构建一个比较轻盈的web开发框架,目的是想抛砖引玉。随后还会将Scala部分整合进来,目的就是唯恐框架不烂!(*^__^*)。 对于代码的不妥之处欢迎各路高手斧正。 mail to : meconsea@...

    Struts2+Guice2整合。如果运行不起来你砍我

    在"proj2"这个压缩包中,包含了整合Struts2和Guice2的具体实现。开发者可能已经花费了四个小时来配置和测试这个项目,确保它可以成功运行。尽管提到有其他类似的资源,但这个项目是作者亲自完成的,所以它应该是一个...

    guice-struts2-plugin-1.0.1.jar

    google-guice struts2-plugin

    guice-struts2-plugin-3.0.jar

    java 开发插件jar包,与guice相关

    guice-3.0.rar

    Guice-3.0是Guice的一个版本,包含了核心库guice-3.0.jar,以及与Spring和Struts2集成的扩展库guice-spring-3.0.jar和guice-struts2-plugin-3.0.jar。 1. **Guice核心概念**: - **依赖注入**:Guice的核心机制,...

    shiro和guice整合,使用权限注解

    Apache Shiro 和 Google Guice 的整合是为了解决在Java应用程序中实现权限管理的问题。Shiro 是一个强大且易用的 Java 安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用。而 ...

    Struts_2核心技术与Java_EE框架整合开发

    - **Struts 2与Guice整合**:Guice是一个轻量级的依赖注入框架,可以替代Spring实现依赖管理。 - **Struts 2与Hibernate整合**:Hibernate是一个流行的ORM框架,可以简化数据库访问逻辑。通过整合Struts 2和...

    Struts 2 整合Spring

    Struts 2 内置了自己的依赖注入框架,类似于Google Guice,这是一种轻量级、基于Java 5的依赖注入容器。虽然Struts 2 本身具备一定的依赖注入能力,但在实际项目中,为了更好地管理组件之间的依赖关系,通常会选择与...

    struts2 lib包

    相关的库如`struts2-spring-plugin`或`struts2-guice-plugin`会包含这些集成的实现。 4. **Tiles**: Struts2可以与Tiles框架结合,用于创建复杂的页面布局。`struts2-tiles-plugin`提供了这个功能。 5. **...

    struts+guice+hibernate

    Struts2、Guice和Hibernate是Java开发中的三个重要框架,它们在构建Web应用程序时各自承担着关键角色。本文将详细解析这三个框架如何协同工作,以及在“Duke银行转账”这一具体应用场景中的运用。 首先,Struts2是...

    google-guice

    3. `guice-struts2-plugin-1.0.jar`:这是一个插件,用于集成Guice与Struts2框架,使得在Struts2应用中也能享受到依赖注入的好处。 4. `aopalliance.jar`:AOP Alliance是一个接口集,提供了面向切面编程(Aspect-...

    Struts2+Guice3整合(不过运行不起来,你砍我)

    这个是我花了四个小时在eclipse上做的项目。我知道还有两个和我一样的项目。我实话告诉你。那两个我都下载了。特么的都不能运行起来。这个如果启动不起来,你砍我。login.jsp是首页。输入信息他会跳转到index.jsp。...

Global site tag (gtag.js) - Google Analytics