アノテーションの使用例(SpringBootApplication)
@SpringBootApplicationと@EnableAutoConfigurationを比較して特徴を検証
結論
Beanを設定したAppConfigクラスのインポートが必要かどうかの違いがある
※@ComponentScanの違いもあるがそれはまた別の機会に。。。
サンプルソースコード
・Calculator.java
package com.example;
import org.springframework.context.annotation.Bean;
public class Calculator {
@Bean
public int calc(int a, int b) {
return a + b;
}
}
・AppConfig.java
package com.example;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
Calculator calculator() {
return new Calculator();
}
}
・SampleApplication.java
【@EnableAutoConfigurationの場合】
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
@EnableAutoConfiguration
//Beanを設定したAppConfigクラスのインポートが必要
@Import(AppConfig.class)
public class SampleApplication {
public static void main(String[] args) {
//DIコンテナの本体となるApplicationContext型で受ける
ApplicationContext context = SpringApplication.run(SampleApplication.class, args);
//CalculatorクラスのBeanを取得
Calculator calculator = context.getBean(Calculator.class);
//calc()メソッドを実行し、変数resultにの結果を格納
int result = calculator.calc(5, 7);
//コンソールに出力
System.out.println(result);
}
}
・SampleApplication.java
【@SpringBootApplicationの場合】
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
@SpringBootApplication
//Beanを設定したAppConfigクラスのインポートが不要
public class SampleApplication {
public static void main(String[] args) {
//DIコンテナの本体となるApplicationContext型で受ける
ApplicationContext context = SpringApplication.run(SampleApplication.class, args);
//CalculatorクラスのBeanを取得
Calculator calculator = context.getBean(Calculator.class);
//calc()メソッドを実行し、変数resultにの結果を格納
int result = calculator.calc(5, 7);
//コンソールに出力
System.out.println(result);
}
}