Differencebetweencontext:annotation-configvscontext:component-scan
1. 概要
このチュートリアルでは、Springの2つの主要なXML構成要素の違いについて学習します。
2. Beanの定義
ご存知のとおり、Springには、Beansと依存関係を定義する2つの方法があります。XML構成とJavaアノテーションです。 Springのアノテーションは、依存性注入アノテーションとbeanアノテーションの2つのグループに分類することもできます。
アノテーションを付ける前に、XML構成ファイルですべてのBeanと依存関係を手動で定義する必要がありました。 Springのアノテーションのおかげで、すべてのBeanと依存関係を自動的に検出してワイヤリングできます。 したがって、少なくともBeanと依存関係に必要なXMLを排除できます。
ただし、アノテーションは、をアクティブにしない限り、役に立たないことを覚えておく必要があります。 それらをアクティブにするために、次のいずれかを追加できます
このセクションでは、その方法を説明します
3. <による注釈のアクティブ化 context:annotation-config>
The
簡単な例を見て、その方法を見てみましょう。
まず、依存関係フィールドを持つクラスを作成しましょう。
public class UserService {
@Autowired
private AccountService accountService;
}
public class AccountService {}
それでは、Beanを定義しましょう。
<bean id="accountService" class="AccountService"></bean>
<bean id="userService" class="UserService"></bean>
先に進む前に、XMLでBeanを宣言する必要があることを指摘しましょう。 それは
ここに表示されているように、[X78X]@Autowiredを使用してaccountServiceフィールドに注釈を付けました。 @Autowiredは、このフィールドが依存関係であり、一致するBeanによって自動的にワイヤリングされる必要があることをSpringに通知します。
@Autowired を使用しなかった場合は、accountServiceの依存関係を手動で設定する必要があります。
<bean id="userService" class="UserService">
<property name="accountService" ref="accountService"></property>
</bean>
これで、単体テストでBeanと依存関係を参照できます。
@Test
public void givenContextAnnotationConfig_whenDependenciesAnnotated_thenNoXMLNeeded() {
ApplicationContext context
= new ClassPathXmlApplicationContext("classpath:annotationconfigvscomponentscan-beans.xml");
UserService userService = context.getBean(UserService.class);
AccountService accountService = context.getBean(AccountService.class);
Assert.assertNotNull(userService);
Assert.assertNotNull(accountService);
Assert.assertNotNull(userService.getAccountService());
}
うーん、ここで何か問題があります。 @Autowired で注釈を付けたにもかかわらず、SpringがaccountServiceを配線していないようです。 @Autowiredがアクティブではないようです。 この問題を解決するために、XMLファイルの上に次の行を追加するだけです。
<context:annotation-config/>
4. <による注釈のアクティブ化 context:component-scan>
と同様に
基本的、
@成分 、 @リポジトリ 、 @サービス 、 @コントローラ 、 @RestController 、 と @構成いくつかのものです
次に、前の例を単純化する方法を見てみましょう。
@Component
public class UserService {
@Autowired
private AccountService accountService;
}
@Component
public class AccountService {}
ここで、 @Componentアノテーションは、クラスをbeansとしてマークします。 これで、XMLファイルからすべてのBean定義をクリーンアップできます。 そしてもちろん、私たちは維持する必要があります
<context:component-scan
base-package="com.baeldung.annotationconfigvscomponentscan.components" />
最後に、Springはbase-package属性で示されるパッケージの下で注釈付きのBeanと依存関係を探すことに注意してください。
5. 結論
このチュートリアルでは、
コードサンプルは、いつものように、GitHubでオーバーです。