Component Scan の機能を使うとクラスパスをスキャンして候補となるコンポーネントを暗黙的に検出してくれるので、設定を記述する量が減らせます。
目次
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>example</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>example</name>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
</dependencies>
</project>
コンポーネントの定義
Component Scan の対象にしたいコンポーネントには @Component
アノテーションをつけます。
@Component
アノテーションの他に用途別に
@Service
@Repository
@Controller
などのアノテーションも利用できます。
どのアノテーションも Component Scan の対象になることには変わりがありませんが、それぞれの用途に応じて Spring が機能を追加することがあります。
例えば @Repository
を利用するとデータの保存処理に関する例外を自動で変換されたりします。
package com.example;
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
public void hello() {
System.out.println("hello");
}
}
設定
Java-based での設定例です。
設定用のクラスに @ComponentScan
を設定します。
package com.example;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan
public class AppConfig {
}
実行
package com.example;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Example {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(AppConfig.class);
MyComponent component = ctx.getBean(MyComponent.class);
component.hello();
}
}
実行結果
hello