這篇文章給大家分享的是有關(guān)Guice如何整合Struts2的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
成都創(chuàng)新互聯(lián)-云計算及IDC服務(wù)提供商,涵蓋公有云、IDC機房租用、遂寧服務(wù)器托管、等保安全、私有云建設(shè)等企業(yè)級互聯(lián)網(wǎng)基礎(chǔ)服務(wù),服務(wù)熱線:18980820575
1.Guice簡介
Guice是Google推出的一款DI框架,因其優(yōu)秀榮獲了Jolt大獎。和Spring相比,要輕量很多。運行時只要指定一個配置類,實現(xiàn)其com.google.inject.Module接口,指定接口和實現(xiàn)類即可。
需要的基礎(chǔ)jar包有
Guice需要的jar包,如果是web應(yīng)用,需要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
Guice與Spring的對比 | ||
Spring | Guice | |
使用XML | 使用將類與類之間的關(guān)系隔離到xml中,由容器負責注入被調(diào)用的對象,因此叫做依賴注入 | 不使用xml,將類與類之間的關(guān)系隔離到Module中,聲名何處需要注入,由容器根據(jù)Module里的描述,注入被調(diào)用的對象。 |
使用Annotation | 使用 | |
運行效率 | 裝載spring配置文件時,需解析xml,效率低,getBean效率也不高,不過使用環(huán)境不會涉及到getBean,只有生產(chǎn)環(huán)境的時候會用到getBean,在裝載spring應(yīng)用程序的時候,已經(jīng)完成全部的注射,所以這個低效率的問題不是問題。 | 使用Annotation,cglib,效率高與spring最明顯的一個區(qū)別,spring是在裝載spring配置文件的時候把該注入的地方都注入完,而Guice呢,則是在使用的時候去注射,運行效率和靈活性高。 |
類耦合度 | 耦合度低,強調(diào)類非侵入,以外部化的方式處理依賴關(guān)系,類里邊是很干凈的,在配置文件里做文章,對類的依賴性極低。 | 高,代碼級的標注,DI標記@inject侵入代碼中,耦合到了類層面上來,何止侵入,簡直侵略,代碼耦合了過多guice的東西,大大背離了依賴注入的初衷,對于代碼的可維護性,可讀性均不利 |
類編寫時 | 需要編寫xml,配置Bean,配置注入 | 只需聲明為@inject,等著被注入, |
僅支持IOC | 否,spring目前已經(jīng)涉獵很多部分 | 是,目前僅僅是個DI容器 |
是否易于代碼重構(gòu) | 統(tǒng)一的xml配置入口,更改容易 | 配置工作是在Module里進行,和spring異曲同功 |
支持多種注入方式 | 構(gòu)造器,setter方法 | Field,構(gòu)造器,setter方法 |
靈活性 | 1,如果同一個接口定義的引用需要注入不同的實現(xiàn),就要編寫不同的Module,煩瑣 2,動態(tài)注入 如果你想注射的一個實現(xiàn),你還未知呢,怎么辦呢,spring是沒辦法,事先在配置文件里寫死的,而Guice就可以做到,就是說我想注射的這個對象我還不知道注射給誰呢,是在運行時才能得到的的這個接口的實現(xiàn),所以這就大大提高了依賴注射的靈活性,動態(tài)注射。 | |
與現(xiàn)有框架集成度 | 1, 高,眾多現(xiàn)有優(yōu)秀的框架(如struts1.x等)均提供了spring的集成入口,而且spring已經(jīng)不僅僅是依賴注入,包括眾多方面。 | 1,可以與現(xiàn)有框架集成,不過僅僅依靠一個效率稍高的DI,就想取代spring的地位,有點難度。 |
配置復雜度 | 在xml中定位類與類之間的關(guān)系,難度低 | 代碼級定位類與類之間的關(guān)系,難度稍高 |
2Helloworld
筆者寫了一個demo,對于簡單的應(yīng)用Guice還是比Spring方便很多
└─com
└─greysh
└─guice
├─action
│ UserAction.java
│
├─config
│ ModuleConfig.java
│
├─model
│ User.java
│
└─service
│ UserService.java
│
└─impl
UserServiceImpl.java
代碼見附件
Guie加載的原理是先去調(diào)用自己實現(xiàn)Module接口的類,這個類類似Spring的applicationcontext.然后調(diào)用configure函數(shù)的binder進行綁定,相當于spring里面的ref綁定,然后綁定完后就在需要注入的放指定 @Inject 進行注入,主要有構(gòu)造函數(shù)注入,方法注入,字段注入。一般而言用方法注入
本教程的User為實體類,僅僅有一個字段userName;
public interface UserService {void invoke(User user);} |
對于接口實現(xiàn)
public void invoke(User user) {user.setUserName("Name : " + user.getUserName()); |
當然最重要的是action
@Inject private UserService userService; @Inject private User user; |
本教程采用字段注入
由于不采用Struts2的自身的DI,因此要指定為guice
感謝各位的閱讀!關(guān)于“Guice如何整合Struts2”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!