簡體   English   中英

對Spring注釋的依賴

[英]Dependency on Spring's annotations

我已經用@ Repository,@ Resource,@ Component,@ Service批注對類進行了批注,但是這些類必須在2種環境中運行。 第一個環境是基於Spring 2.x的,而另一個環境根本沒有Spring。 我敢肯定,如果沒有spring jars,代碼將失敗,並且我想從您那里了解如何保留注釋,但仍然可以在兩種環境下工作的想法

為了能夠使用您提到的注釋,或者說真正地讓Spring為您使用注釋,以便從中獲得好處,您至少需要使用Spring 2.5.x,這是它們被引入的時間。

此外,注釋不需要在類路徑上。 他們將被忽略。 因為當您使用spring 2.0時,不會有代碼嘗試“掃描”它們。

對於Java中的每個注釋,都有一個對應的類文件。 如果發現使用了哪些注釋,則可以將類文件復制到其他環境。

我不確定這些類是否依賴於其他類。 它們可能不是,因為注釋是不可變的純數據對象。 如果該類還具有方法,則可以重新編譯注釋源(使用相同的序列化ID),而無需使用方法(即僅字段)來在其他環境中使用。

由於您無法刪除已接受的帖子,因此我建議您閱讀/投票給Hans的帖子,這比我原來的帖子要好得多: 依賴於Spring的注釋


當使用構造型注釋(@Service等)時,獲得編譯時bean驗證的權衡是您已耦合到代碼中的spring-context庫。 我看到3個立即選擇:

1)刪除注釋,並以XML配置您的bean。

2)將spring-context.jar(或包含構造型批注的等效庫)復制到非Spring項目中以解決依賴關系,但是將Spring保留為未配置狀態,以便在您的代碼中不使用它。

3)從具體的類中刪除注釋,並使用“ Spring”版本進行擴展。 這種方法可能或可能不會對您的設計造成太大影響,但值得考慮:

 
 
 
 
  
  
  public class MyDAO { protected SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } // .. Your DAO code resides here .. }
 
 
  

和Spring子類:

 
 
 
 
  
  
  @Repository public class MySpringDAO extends MyDAO { @AutoWired protected SessionFactory sessionFactory; }
 
 
  

這樣,您的非Spring項目可以使用“ MyDAO”,並從構建中排除“ MySpringDAO”類。

如果它迫使您直接讓類依賴於它,那將不是春天。

您可以定義自己的注釋,這些注釋的作用與經過彈簧驗證的注釋相同。 即定義com.yourcompany .... Component等。

我假設您在spring配置中的某個地方使用了<context:component-scan .../> 只需添加use-default-filters="false"並定義您自己的過濾器以匹配您的注釋即可。

尋找實際完成艱苦工作的PostProcessor。 可以將它們配置為使用備用注釋集。 @RepositoryPersistenceExceptionTranslationPostProcessor檢查。 可以將此PostProcessor配置為使用與注解等效的PostProcessor。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM