1概要

このチュートリアルでは、Springのhttps://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/annotation/Order.html[

@Order

]について学びます。注釈。 **

@ Order

アノテーションはアノテーションが付けられたコンポーネントまたはBeanのソート順を定義します。

これは、コンポーネントの順番を決めるオプションのvalue引数を持ちます。デフォルト値は

Ordered.LOWEST

PRECEDENCE__です。これは、そのコンポーネントが他のすべての順序付けされたコンポーネントの中で最も優先順位が低いことを示します。

同様に、

Ordered.HIGHEST

PRECEDENCE__という値を使用して、コンポーネント間の最高の優先順位を上書きすることができます。


2いつ使うか

@ Order


Spring 4.0より前では、

@ Order

アノテーションはAspectJの実行順序に対してのみ使われていました。それは最上位のアドバイスが最初に実行されることを意味します。

Spring 4.0から、注入されたコンポーネントのコレクションへの順序付けをサポートしています。その結果、Springはそれらの注文値に基づいて同じタイプの自動配線Beanを投入します。

簡単な例を使って探りましょう。


3

@ Order


の使い方

まず最初に、関連するインターフェースとクラスを使ってプロジェクトを設定しましょう。


3.1. インターフェース作成

商品の評価を決定する

Rating

インターフェースを作成しましょう。

public interface Rating {
    int getRating();
}


3.2. コンポーネント作成

最後に、一部の商品の評価を定義する3つのコンポーネントを作成しましょう。

@Component
@Order(1)
public class Excellent implements Rating {

    @Override
    public int getRating() {
        return 1;
    }
}

@Component
@Order(2)
public class Good implements Rating {

    @Override
    public int getRating() {
        return 2;
    }
}

@Component
@Order(Ordered.LOWEST__PRECEDENCE)
public class Average implements Rating {

    @Override
    public int getRating() {
        return 3;
    }
}


__Average

__classは、その値がオーバーライドされているため、優先順位が最も低くなります。


4例をテストする

これまで、

@ Order

アノテーションをテストするために必要なコンポーネントとインターフェイスをすべて作成しました。それでは、期待通りに動作することを確認するためにテストしましょう。

public class RatingRetrieverUnitTest {

    @Autowired
    private List<Rating> ratings;

    @Test
    public void givenOrder__whenInjected__thenByOrderValue() {
        assertThat(ratings.get(0).getRating(), is(equalTo(1)));
        assertThat(ratings.get(1).getRating(), is(equalTo(2)));
        assertThat(ratings.get(2).getRating(), is(equalTo(3)));
    }
}


5結論

このクイック記事で

@ Order

アノテーションについて学びました。自動配線されたコンポーネントの順序が重要な場合、

@ Order

の用途はさまざまな使用例にあります。その一例が、Springのリクエストフィルタです。

インジェクションの優先順位への影響により、シングルトンの起動順序にも影響を与える可能性があります。しかし、対照的に、依存関係と

__ @ DependsOn

__宣言は、シングルトンの起動順序を決定します。

このチュートリアルで言及されている例はすべてhttps://github.com/eugenp/tutorials/tree/master/spring-all[Githubでの使用]にあります。