?
? ????? PHP ??? ???? ??? ?? ??
目錄
Required
源代碼級的元數據通常是對類或方法這樣的程序元素的屬性或注解的補充。
舉例來說,我們可以象下面這樣給一個類添加元數據:
public class PetStoreImpl implements PetStoreFacade, OrderService {
我們也可以像下面這樣為一個方法添加元數據:
public void echoException(Exception ex) throws Exception { .... }
這兩個例子都使用了Jakarta Commons Attributes的語法。
源代碼級的元數據隨著XDoclet(在Java世界中)和Microsoft的.NET平臺的發(fā)布被引入主流, 后者使用了源代碼級的屬性來控制事務、緩沖池(pooling)和一些其他的行為。
J2EE社區(qū)已經認識到了這種方法的價值。舉例來說,跟EJB中專用的傳統XML部署描述文件比起來它要簡單很多。 與人們樂意做的把一些東西從程序源代碼中提取出來的做法相反,一些重要的企業(yè)級設置 - 特別是事務特性 - 應該屬于程序代碼。 并不像EJB規(guī)范中設想的那樣,調整一個方法的事務特性基本沒有什么意義(盡管像事務超時這樣的參數可能改變)。
雖然元數據屬性主要用于框架的基礎設施中,來描述應用程序的類所需要的服務,但是它也可以在運行時被查詢。 這是它與XDoclet這樣的解決方案的關鍵區(qū)別,XDoclet主要把元數據作為生成代碼的一種方式,比如生成EJB類。
下面有幾種解決方案,包括:
標準Java注解:標準Java元數據實現(作為JSR-175標準被開發(fā)并可在 Java 5中找到)。 Spring已經在事務劃分、JMX和切面(準確地說它們是AspectJ的注解)中支持Java 5注解。 不過, 既然Spring也支持Java 1.4,我們仍需要一個JVM不同版本間的解決方案。Spring元數據支持就提供了這樣一個方案。
XDoclet:成熟的解決方案,主要用于代碼生成。
在多種不同的針對Java 1.4的開源屬性實現中,Commons Attributes看起來是最完整的實現。 所有的這些實現都需要一個特定的前置編譯或后置編譯的步驟。