?
このドキュメントでは、 php中國語ネットマニュアル リリース
雖然為其他元數(shù)據(jù)提供者提供org.springframework.metadata.Attributes
接口的實現(xiàn)很簡單,但是目前Spring只支持Jakarta Commons Attributes。
Commons Attributes 2.2(http://jakarta.apache.org/commons/attributes/)是一個功能很強的元數(shù)據(jù)屬性解決方案。 它支持通過構造方法參數(shù)和JavaBean屬性來配置屬性,這為屬性定義提供了更好的自說明文檔。 (對JavaBean屬性的支持是在Spring小組的要求下添加的。)
我們已經看到了兩個Commons Attributes的屬性定義的例子。讓我們大體上解釋一下:
屬性類的名稱。這可能是一個全限定名稱(fully qualified name, FQN), 就像上面的那樣。如果相關的屬性類已經被導入,就不需要FQN了。你也可以在屬性編譯器的設置中指定屬性的包名。
任何必須的參數(shù)化。可以通過構造方法參數(shù)或者JavaBean屬性完成。
Bean的屬性可以是這樣的:
可以把構造方法參數(shù)和JavaBean屬性結合在一起(就像在Spring IoC中一樣)。
由于Common Attributes沒有像Java 1.5中的屬性那樣和Java語言本身結合起來, 因此需要運行一個特定的屬性編譯步驟作為整個構建過程的一部分。
為了在整個構建過程中運行Commmons Attributes,你需要做以下的事情:
1. 復制一些必要的jar包到$ANT_HOME/lib
。有四個必須的jar包,它們包含在Spring的發(fā)行包里:
Commons Attributes編譯器jar和API jar
XDoclet中的xJavadoc.jar
Jakarta Commons中的commons-collections.jar
2. 把Commons Attributes的ant任務導入到你的項目構建腳本中去,像下面這樣:
<taskdef resource="org/apache/commons/attributes/anttasks.properties"/>
3. 接下來,定義一個屬性編譯任務,它將使用Commons Attributes的attribute-compiler任務來“編譯”源代碼中的屬性。
這個過程將生成額外的代碼至destdir
屬性指定的位置。在這里我們使用了一個臨時目錄來保存生成的文件:
<target name="compileAttributes"> <attribute-compiler destdir="${commons.attributes.tempdir}"> <fileset dir="${src.dir}" includes="**/*.java"/> </attribute-compiler> </target>
運行javac命令編譯源代碼的編譯目標任務應該依賴于屬性編譯任務,還需要編譯屬性時生成至目標臨時目錄的源代碼。 如果在屬性定義中有語法錯誤,通常都會被屬性編譯器捕獲到。但是,如果屬性定義在語法上似是而非,卻使用了一些非法的類型或類名, 生成屬性類的編譯可能會失敗。在這種情況下,你可以看看所生成的類來確定錯誤的原因。
Commons Attributes也提供對Maven的支持。請參考Commons Attributes的文檔得到進一步的信息。
雖然屬性編譯的過程可能看起來復雜,實際上它是一次性的花銷。一旦被創(chuàng)建后,屬性的編譯是遞增式的,所以通常它不會明顯減慢整個構建過程。 一旦編譯過程建立起來后,你可能會發(fā)現(xiàn)本章中描述的屬性的使用將節(jié)省在其他方面的時間。
如果需要屬性索引支持(目前只在Spring的以屬性為目標的web控制器中需要,下面會討論到),你需要在包含編譯后的類的jar文件上執(zhí)行一個額外的步驟。 在這步可選的步驟中,Commons Attributes將為你在源代碼中定義的所有屬性創(chuàng)建一個索引,以便在運行時進行有效的查找。 該步驟如下:
<attribute-indexer jarFile="myCompiledSources.jar"> <classpath refid="master-classpath"/> </attribute-indexer>
可以到Spring jPetStore例程下的/attributes
目錄下察看它的構建過程。
你可以使用它里面的構建腳本,并修改該腳本以適應你自己的項目。
如果你的單元測試依賴于屬性,盡量使它依賴于Spring Attributes抽象,而不是Commons Attributes。原因有兩點, 其一是為了更好的移植性 - 舉例來說,你的測試用例將來仍可以工作如果你轉換至Java 1.5的屬性 - 它簡化了測試。 其次,Commons Attributes是靜態(tài)的API,而Spring提供的是一個容易模擬的元數(shù)據(jù)接口。