ホームページ >Java >&#&チュートリアル >Spring の @Autowired アノテーションはどのように機能するのか、またそれを使用するためのベスト プラクティスは何ですか?

Spring の @Autowired アノテーションはどのように機能するのか、またそれを使用するためのベスト プラクティスは何ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-18 17:42:10605ブラウズ

How Does Spring's @Autowired Annotation Work, and What are the Best Practices for Using It?

Spring のニュアンスを明らかにする @Autowired: 総合ガイド

Spring の領域では、@Autowired は、 Bean ワイヤリングにより、開発者は XML ファイルを手動で構成する必要がなくなります。ただし、その複雑な仕組みを理解することは、初心者にとっては複雑な作業になる可能性があります。

分析例

提供されているコード例を検討してください:

public class SimpleMovieLister {

    private MovieFinder movieFinder;

    @Autowired
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }
}

public class MovieRecommender {

    private MovieCatalog movieCatalog;

    private CustomerPreferenceDao customerPreferenceDao;

    @Autowired
    public void prepare(MovieCatalog movieCatalog,
                    CustomerPreferenceDao customerPreferenceDao) {
        this.movieCatalog = movieCatalog;
        this.customerPreferenceDao = customerPreferenceDao;
    }
}

これらの例では、@Autowired は Bean の依存関係をフィールドまたはセッター メソッドに挿入します。 Bean をオートワイヤリングするように指定すると、Spring は必要な Bean を自動的に検出して関連付け、開発者を明示的な Bean ワイヤリングから解放します。

オートワイヤリングについて

自動ワイヤリングを有効にするには、Spring は次の実行を実行します。提供された基本パッケージに基づいてコンポーネントをスキャンし、アノテーション付きクラス (@Component、@Controller など) を潜在的な Bean として検出します。スキャン プロセス中に、@Autowired アノテーションが識別され、プロパティまたはメソッドが注入ポイントとしてマークされます。

Bean が作成されると、Spring は autowired プロパティまたはメソッドを走査し、一致するタイプの Bean を検索します。同じタイプの Bean が複数存在する場合、 @Qualifier を使用して目的の Bean を指定しない限り、例外がスローされます。

自動配線の例

自動配線のシナリオを説明するには、次のことを考慮します。次の例:

interface Color {
    void design();
}

class Red implements Color {
    @Override
    public void design() {
        // Red design logic
    }
}

class Blue implements Color {
    @Override
    public void design() {
        // Blue design logic
    }
}

class MainClass {
    @Autowired
    private Color color;

    public static void main(String[] args) {
        MainClass mainClass = new MainClass();
        mainClass.color.design(); // Red or Blue?
    }
}

この例では、Red と Blue の両方が Color インターフェイスを実装しています。 MainClass.color の @Autowired アノテーションは、Spring が Color インターフェースのインスタンスを自動的に挿入する必要があることを示します。ただし、追加のガイダンスがなければ、Spring はどの特定の実装を注入するかを決定できません。

この曖昧さを解決するには、@Qualifier または @Resource アノテーションを活用する必要があります。

Using @Qualifier

@Qualifier("redBean")
class Red implements Color {}

@Qualifier("blueBean")
class Blue implements Color {}

MainClass で使用される場合、@Qualifier は自動配線を絞り込みます

@Resource を使用する

@Resource(name="redBean")
private Color color;

@Resource は、@Autowired アノテーションと @Qualifier アノテーションを組み合わせて、「」という名前の Bean を注入します。 redBean".

最高実践

最適な自動配線の実践については、次のガイドラインを考慮してください。

  • @Autowired の代わりに @Inject を使用します。これは、JSR-330 標準に準拠しており、Spring ではないためです。 specific.
  • メソッドではなくコンストラクターにアノテーションを付けて、null チェックと早期エラーを有効にする検出。

以上がSpring の @Autowired アノテーションはどのように機能するのか、またそれを使用するためのベスト プラクティスは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。