Struts2 學習筆記——struts.xml文件之Bean的配置


Struts2的大部分核心組件不是以硬編碼的形式寫在代碼中,而是通過自身的IoC容器來管理的。

Struts2以可配置的形式來管理核心組件,所以開發者可以很容易的擴展框架的核心組件。當開發者需要擴展或者替換Struts2的核心組件時,只需要提供自己的組件實現類,並部署在Struts2的IoC容器中即可。

我們打開struts2-core-2.2.1.1.jar中的struts-default.xml文件,可以看到大量的Bean的定義。如下代碼片段:

<struts>

    <!—- 兩個對象工廠組件-->

 <bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" />

<bean type="com.opensymphony.xwork2.ObjectFactory"

            name="struts"  

           class="org.apache.struts2.impl.StrutsObjectFactory" />

... ... 

而我們在struts.xml定義Bean時,通常有以下兩個作用:

1、 創建的Bean實例作為Struts2框架的核心組件使用。

2、  Bean的靜態方法需要一個值注入。

對於第一種用法,Bean的實例作為核心組件使用。因此需要告訴Struts2容器實例的作用----即實現了Struts2的某個接口,這個接口定義了該組件必須遵循的規范。

例如下面我們使用一個自定義的ObjectFactory對象來替換Struts2的內置ObjectFactory

<!—-配置自定義的ObjectFactory Bean,名稱為myFactory,

實現com.opensymphony.xwork2.ObjectFactory 類,

實現類com.smp.ObjectFactory -->

<bean name="myFactory"

type="com.opensymphony.xwork2.ObjectFactory" class="com.smp.ObjectFactory" />

 

在使用<bean/>元素在struts.xml文件中定義Bean,bean元素有以下幾個屬性

class:這個屬性是個必填屬性,它指定了Bean實例的實現類。

type:這個屬性是個可選屬性,它指定了Bean實例實現的Struts2的規范,該規范通常是通過某個接口或者在此前定義過的Bean,因此該屬性值通常是個接口或者此前定義過的Bean的name屬性值。如果需要將Bean的實例作為Strut2組件使用,則應該指定該屬性的值。

name:該屬性是個可選屬性,它指定的Bean實例的名字,對於有相同type的多個Bean。則它們的name屬性不能相同。

scope:該屬性是個可選屬性,它指定Bean實例的作用域,該屬性的值只能是default、singleton、request、session或thread之一。

static:該屬性是個可選屬性,它指定Bean是否使用靜態方法注入。通常而言,當指定了type屬性時,該屬性就不應該指定為true。

optional:該屬性是個可選屬性,它指定Bean是否是一個可選Bean。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM