自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Guice整合Struts2簡易教程

開發(fā) 后端
本文將詳細(xì)介紹如何用Guice進(jìn)行DI和如何整合Struts2。Guice是Google推出的一款DI框架,運(yùn)行時比較簡單。

1. Guice簡介
  

Guice是Google推出的一款DI框架,因其優(yōu)秀榮獲了Jolt大獎。和Spring相比,要輕量很多。運(yùn)行時只要指定一個配置類,實現(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

GuiceSpring的對比

 

Spring

Guice

使用XML

使用將類與類之間的關(guān)系隔離到xml中,由容器負(fù)責(zé)注入被調(diào)用的對象,因此叫做依賴注入

不使用xml,將類與類之間的關(guān)系隔離到Module中,聲名何處需要注入,由容器根據(jù)Module里的描述,注入被調(diào)用的對象。

使用Annotation

 

使用
支持自定義Annotation標(biāo)注,對于相同的接口定義的對象引用,為它們標(biāo)注上不同的自定義Annotation注釋,就可以達(dá)到同一個類里邊的同一個接口的引用,注射給不同的實現(xiàn),在Module里用標(biāo)注做區(qū)分,靈活性大大增加。
使用Annotation也未必是好事,范型等新特性也未必是好事,目前大多的服務(wù)器均不支持jdk1.5,wls9以前才支持,而目前的客戶由于價格原因也很少選用wls9的,至少我們做過的項目中都沒有。功能再強(qiáng),客戶不需要,何用?

運(yùn)行效率

裝載spring配置文件時,需解析xml,效率低,getBean效率也不高,不過使用環(huán)境不會涉及到getBean,只有生產(chǎn)環(huán)境的時候會用到getBean,在裝載spring應(yīng)用程序的時候,已經(jīng)完成全部的注射,所以這個低效率的問題不是問題。

使用Annotation,cglib, 效率高與spring最明顯的一個區(qū)別,spring是在裝載spring配置文件的時候把該注入的地方都注入完,而Guice呢,則是在使用的時候去注射,運(yùn)行效率和靈活性高。

類耦合度

耦合度低,強(qiáng)調(diào)類非侵入,以外部化的方式處理依賴關(guān)系,類里邊是很干凈的,在配置文件里做文章,對類的依賴性極低。

高,代碼級的標(biāo)注,DI標(biāo)記@inject侵入代碼中,耦合到了類層面上來,何止侵入,簡直侵略,代碼耦合了過多guice的東西,大大背離了依賴注入的初衷,對于代碼的可維護(hù)性,可讀性均不利

類編寫時

需要編寫xml,配置Bean,配置注入

只需聲明為@inject,等著被注入,
***在統(tǒng)一的Module里聲明注入方式

僅支持IOC

否,spring目前已經(jīng)涉獵很多部分

是,目前僅僅是個DI容器

是否易于代碼重構(gòu)

統(tǒng)一的xml配置入口,更改容易

配置工作是在Module里進(jìn)行,和spring異曲同功

支持多種注入方式

構(gòu)造器,setter方法

Field,構(gòu)造器,setter方法

靈活性

 

1,如果同一個接口定義的引用需要注入不同的實現(xiàn),就要編寫不同的Module,煩瑣

2,動態(tài)注入

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

與現(xiàn)有框架集成度

1, 高,眾多現(xiàn)有優(yōu)秀的框架(如struts1.x等)均提供了spring的集成入口,而且spring已經(jīng)不僅僅是依賴注入,包括眾多方面。
2
, Spring也提供了對Hibernate等的集成,可大大簡化開發(fā)難度。
3
, 提供對于orm,rmi,webservice等等接口眾多,體系龐大。

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

配置復(fù)雜度

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進(jìn)行綁定,相當(dāng)于spring里面的ref綁定,然后綁定完后就在需要注入的放指定 @Inject 進(jìn)行注入,主要有構(gòu)造函數(shù)注入,方法注入,字段注入。一般而言用方法注入
  

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

public interface UserService {

  void invoke(User user);

  }

對于接口實現(xiàn) 

public void invoke(User user) {

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

  

當(dāng)然最重要的是action  

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


本教程采用字段注入

由于不采用Struts2的自身的DI,因此要指定為guice

<CONSTANT value="utf8" name="struts.i18n.encoding" />
<CONSTANT value="com.greysh.guice.config.ModuleConfig" name="guice.module" />

您正在閱讀的是“Guice整合Struts2簡易教程

【編輯推薦】

  1. 在Eclipse中開發(fā)struts應(yīng)用程序
  2. 手把手教你在Eclipse中配置開發(fā)Struts
  3. Eclipse下開發(fā)struts完整解決亂碼問題
責(zé)任編輯:張燕妮 來源: IT168
相關(guān)推薦

2009-06-25 15:11:28

Struts2教程Struts2程序

2009-02-04 10:51:07

2009-07-17 17:45:56

iBATIS Spri

2009-06-25 16:04:30

2009-06-25 15:26:25

Struts2教程struts.xml常

2009-02-04 15:04:13

2009-06-25 15:54:42

Struts2教程攔截器

2009-06-25 15:50:03

Struts2教程上傳任意多個文件

2009-02-04 11:37:15

2009-07-29 09:54:34

struts2和str

2009-06-25 15:33:12

Struts2教程使用validate驗證數(shù)據(jù)

2009-02-04 14:19:38

2009-06-25 15:37:12

Struts2教程Validation框

2009-02-04 14:00:59

2009-02-04 12:00:08

2009-06-25 15:59:21

Struts2教程攔截器

2009-02-04 13:13:03

2009-06-04 08:53:57

struts2視頻教程

2009-02-04 11:00:44

2009-06-04 08:34:24

Struts2配置struts.xml
點贊
收藏

51CTO技術(shù)棧公眾號