struts2框架是一個高度可擴展的框架,框架的大部分核心組件,struts2並不是以硬編碼的方式寫在代碼中的,而是以自己的IoC(控制反轉)容器來管理框架的核心組件。
struts2框架以可配置的方式來管理struts2的核心組件,從而允許開發者可以很方便的擴展該框架的核心組件。當開發者需要擴展,或者替換struts2的核心組件時,只需要提供自己的組件實現類,並將該組件實現類部署在struts2的IoC容器中即可。
在struts.xml文件中定義Bean時,通常有如下兩個作用。
1. 創建該Bean的實例,將該實例作為struts2框架的核心組件使用。
2. Bean包含的靜態方法需要注入一個值。
舉例說明:例如下面的struts.xml文件中的Bean配置,我們使用了一個自定義的ObjectFactory來替換struts2內置的ObjectFactory。配置代碼片段如下:
<struts> <!-- 配置定制的ObjectFactory Bean,該Bean實現了ObjectFactory接口,實現類是MyObjectFactory--> <bean type="com.opensymphony.xwork2.ObjectFactory" name="myfactory" class="com.opensymphony.xwork2.myapp.MyObjectFactory"/> </struts>
配置文件解釋:
<bean />元素在struts.xml文件中定義Bean,bean元素有如下幾個屬性:
class:必填屬性,它指定Bean實例的實現類。
type:可選屬性,它指定Bean實例實現的struts2的規范,該規范通常是通過某個接口來體現,因此該屬性的值通常是一個struts2接口。如果需要將Bean實例作為struts2組件來使用,則應該指定該屬性的值。
name:可選屬性,該屬性指定Bean實例的名字,對於有相同type類型的多個Bean,他們的name屬性不能相同。
scope:可選屬性,該屬性指定Bean實例的作用域,屬性值只能是default、singleton、request、session或者thread之一。
static:可選屬性,該屬性指定Bean是否使用靜態方法注入,通常而言,當指定了type屬性時,該屬性值不應該指定為true。
optional:可選屬性,該屬性指定該Bean是否是一個可選的Bean。