2010-12-30 22 views
12
@Service @Order(1) 
public class FooService implements IService {..} 

@Service @Order(2) 
public class BarService implements IService {..} 

が、それは次のリスト内の順序は常に{FooService, BarService}になることが保証されている豆の定義された順序と同じです(同じ質問がXML設定になります)、順序がリストに

+1

含むように拡張されましたソースコードですが、そこではかなり怖いです。私はそれを十分に追うことができません。私は答えが "はい"だと思う。 – skaffman

+0

@skaffmanそれは最も論理的な行為であり、その点については春の通常の「政策」が与えられているので、私はまた「はい」と疑います。しかし、私は証拠を見つけることを試みるでしょう:) – Bozho

+0

@skaffman - 私たちの期待は間違っているようです)(axtavtの答えとコメントを参照してください) – Bozho

答えて

11

@Orderは一般的な目的の注釈ではありません。 javadocから:

注:アノテーションベースの並べ替えは、特定の種類のコンポーネントのみでサポートされています。アノテーションに基づくAspectJの側面一方、Springコンテナ戦略は、通常、各インスタンスの構成可能な順序付けを可能にするために、オーダーされたインタフェースに基づいています。

beanscontextモジュールのソースでorg.springframework.core.annotation.OrderAnnotationAwareOrderComparatorのない出現箇所がありません。

予想通り、これは動作させるための簡単な方法は次のとおりです。

@PostConstruct 
public void init() { 
    Collections.sort(services, AnnotationAwareOrderComparator.INSTANCE); 
} 
+0

そして、代わりに 'Ordered'を実装すれば、リストの中で正しく注文されていますか? – Bozho

+0

@Bozho:私は 'Ordered'も助けにならないと思います。' OrderComparator'はポストプロセッサーのような特別な豆を注文するためだけに使われるようです。 – axtavt

+0

それをテストし、あなたが正しいことをテストで証明しました。答えを受け入れ、回避策を追加しました(あなたがそれに同意しない場合は、それを自由に削除してください:))。 – Bozho

3

春4のリリース以来、@Orderの使用は、私はちょうど春を介してこれをトレースしてみました@Component