プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

アノテーションの使用例(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);
    }
}