3

私は Spring フレームワークの初心者であり、 @Autowiredアノテーションとインターフェース宣言の使用についていくつか質問があります。

この例を参照すると、次のようになります。

http://viralpatel.net/blogs/spring3-mvc-hibernate-maven-tutorial-eclipse-example/

@Autowired アノテーションを使用して、Bean をプロパティに自動的にリンクできることを知っています。

前の例では、次の状況があります。

ContactDAOインターフェイスがあり、それはContactDAOImplという名前の実装クラスです

次のクラスContactServiceImplには、 @Autowiredを使用して注釈が付けられたこの変数があります。

@Autowired
private ContactDAO contactDAO;

私の最初の疑問は、ContactDAOインターフェースであるという事実に関連しているので、何を配線しているのでしょうか? 具体的な型: ContactDAOImpl ? はいの場合、Spring Framework はそれを行いますか?

2 番目の疑問は、spring-servlet.xml構成ファイルにContactDAOまたはContactAOImplクラスの Bean 定義がないという事実に関連しています...なぜですか? @Repositoryアノテーションを使用してContactDAOImplクラスにアノテーションが付けられているためでしょうか。

ありがとう

アンドレア

4

3 に答える 3

5

私の最初の疑問は、ContactDAO がインターフェースであるという事実に関連しているので、何を配線しているのでしょうか? 具体的な型: ContactDAOImpl ? はいの場合、Spring Framework はそれを行いますか?

Spring は、一致する実装が 1 つしかない限り、インターフェイスの実装を自動配線します。@Qualifierwithを使用して実装に名前を付けることで、複数の候補から単一の実装をオートワイヤリングに一致させる方法もあります@Autowired

2 番目の疑問は、spring-servlet.xml 構成ファイルに ContactDAO または ContactAOImpl クラスの Bean 定義がないという事実に関連しています...なぜですか? @Repository アノテーションを使用して ContactDAOImpl クラスにアノテーションが付けられているためでしょうか。

構成の実装でアノテーション ( @Component@Repository@Service@Controller) を使用している場合、xml で Bean を明示的に定義する必要はありません (それも可能ですが)。

編集:私のこの古い答えは、Springでの注釈の使用についてさらに光を当てるかもしれません。

于 2013-02-23T09:49:35.537 に答える
2

あなたの 2 つの質問に対する答えは、はい、はいです。

実際には、サービスでオートワイヤーされた ContactDAOImpl のインスタンスではなく、ContactDAOImpl のインスタンスに deletage するプロキシのインスタンスがある場合があります。プロキシは通常、トランザクションの処理、例外の変換などを行います。

そして@Repositoryアノテーションは、Spring Bean を宣言する代替 (より単純な) 方法です。Spring xml ファイルに、アノテーション付き Bean を検出するように指示する要素がある場合にのみ機能します。

于 2013-02-23T09:48:03.650 に答える
2

Spring はすべてのクラスを自動スキャンし、注釈付きのすべてのクラスを見つけて登録します。Spring 構成でこれを行うように指示します。

<context:component-scan base-package="my.base.package" />

@Repositoryしたがって、設定ファイルで yourを宣言する必要はありません。

あなたの質問の最初の部分に、これはIOC パターンの固定解除です。Service クラスは DAO のインターフェースのみを認識します。これは、実装に依存しないことを意味します。

スキャン中、Spring はアノテーションが付けられたすべてのクラス@Autowiredを見つけます。 を要求すると、Autowired を要求したインターフェースの実装者であるアノテーションを付けたクラスを見つけようとします。

Annotation Configurationに関する Spring のドキュメントをご覧ください。

于 2013-02-23T09:50:36.797 に答える