熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Guice整合Struts2簡易教程

2013-11-23 20:42:11  來源: Java開源技術 

  Guice簡介

  Helloworld

  簡介本文為如何用Guice進行DI和如何整合Struts

   簡介

  Guice是Google推出的一款DI框架因其優秀榮獲了Jolt大獎和Spring相比要輕量很多運行時只要指定一個配置類實現其comgoogleinjectModule接口指定接口和實現類即可

  需要的基礎jar包有

  Guice需要的jar包如果是web應用需要guiceservletjar整合Struts則需要guicestrutspluginjar

  aopalliancejar

  guicejar

  guiceservletjar

  guicestrutspluginjar

  Struts需要的jar包

  commonsfileuploadjar

  commonsiojar

  commonsloggingjar

  freemarkerjar

  ognljar

  strutscorejar

  xworkjar

  

  Guice與Spring的對比(此表格轉自網絡)

  Spring

  Guice

  使用XML

  使用將類與類之間的關系隔離到xml中由容器負責注入被調用的對象因此叫做依賴注入

  不使用xml將類與類之間的關系隔離到Module中聲名何處需要注入由容器根據Module裡的描述注入被調用的對象

  使用Annotation

  使用
支持自定義Annotation標注對於相同的接口定義的對象引用為它們標注上不同的自定義Annotation注釋就可以達到同一個類裡邊的同一個接口的引用注射給不同的實現在Module裡用標注做區分靈活性大大增加
使用Annotation也未必是好事范型等新特性也未必是好事目前大多的服務器均不支持jdkwls要以前才支持而目前的客戶由於價格原因也很少選用wls至少我們做過的項目中都沒有功能再強客戶不需要何用?

  運行效率

  裝載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方法

  靈活性

  如果同一個接口定義的引用需要注入不同的實現就要編寫不同的Module煩瑣

  動態注入

  如果你想注射的一個實現你還未知呢怎麼辦呢spring是沒辦法事先在配置文件裡寫死的而Guice就可以做到就是說我想注射的這個對象我還不知道注射給誰呢是在運行時才能得到的的這個接口的實現所以這就大大提高了依賴注射的靈活性動態注射

  與現有框架集成度

   高眾多現有優秀的框架(如strutsx等)均提供了spring的集成入口而且spring已經不僅僅是依賴注入包括眾多方面
 Spring也提供了對Hibernate等的集成可大大簡化開發難度
 提供對於ormrmiwebservice等等接口眾多體系龐大

  可以與現有框架集成不過僅僅依靠一個效率稍高的DI就想取代spring的地位有點難度

  配置復雜度

  在xml中定位類與類之間的關系難度低

  代碼級定位類與類之間的關系難度稍高

  關於Annotation的簡介可以查看筆者另一篇教程

  %E%AE%%E%BB%B

  Helloworld

  筆者寫了一個demo對於簡單的應用Guice還是比Spring方便很多

  └─com

  └─greysh

  └─guice

  ├─action

  │ UserActionjava

  │

  ├─config

  │ ModuleConfigjava

  │

  ├─model

  │ Userjava

  │

  └─service

  │ UserServicejava

  │

  └─impl

  UserServiceImpljava

  代碼見附件

  Guie加載的原理是

  先去調用自己實現Module接口的類這個類類似Spring的applicationcontext然後調用configure函數的binder進行綁定相當於spring裡面的ref綁定然後綁定完後就在需要注入的放指定 @Inject 進行注入主要有構造函數注入方法注入字段注入一般而言用方法注入

  本教程的User為實體類僅僅有一個字段userName;  



public interface UserService {

  void invoke(User user);

  }

  對於接口實現  



public void invoke(User user) {

  usersetUserName(Name : + usergetUserName());

  當然最重要的是action  



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

  本教程采用字段注入

  由於不采用Struts的自身的DI因此要指定為guice



<constant name=strutsobjectFactory value=guice />
<constant name=strutsinencoding value=utf />
<constant name=guicemodule value=nfigModuleConfig />
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28927.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.