@Configurationの使い方と引数を徹底解説!【初心者向け】

@Configurationってなに?

@Configurationは、メソッドをBean登録できるアノテーションです。
@Service@Repository@Controllerを使うとクラスごとのBean登録になりますが、@Configurationを使うとメソッドごとになり、もう少し複雑な設定もできます。


Bean登録についてよくわからない方はこちらをどうぞ↓

基本的な使い方

@Configurationは@Beanとセットで使います。
@Beanの戻り値が@Configuration内だと自動的にBean登録されるということです。

@Configuration
public class MyConfig {

    @Bean
    public String snack() {
        return "チョコレート";
    }

    @Bean
    public Integer number() {
        return 42;
    }

上記のコードでは、@Configurationを付けたMyConfigクラスを作成しています。
ここで、snack()がBean登録されました。
使うときはいつもと同じように、@autowiredなどを使えばいいだけです。

@Component
public class Party {

    @Autowired
    private String snack;

    @Autowired
    private Integer number;

    public void serveSnack() {
        System.out.println("おやつは " + snack + number +" 個です!");
    }
}

これで、おやつはチョコレート42個です!という文字が出力される関数が完成します。


@Configurationの利点

1. タイプセーフ

Javaコード内で設定を行うため、IDEの補完機能やコンパイル時の型チェックが利用できます。これにより、XMLファイルを使用する場合よりもエラーが少なく、保守性が向上します。

2. コードの再利用

Javaコード内でBeanの設定を行うため、クラスやメソッドを容易に再利用できます。さらに、他のクラスと連携して使うことができ、設定が柔軟に行えます。

3. テストが容易

Javaベースの設定は、JUnitなどのテストフレームワークと簡単に統合できます。必要な部分のみをテスト環境に適用でき、モック化が簡単です。


@Configurationの応用編

ここからは、@Configurationアノテーションの応用的な使い方を見ていきましょう。

1. 複数の@Configurationクラス

@Configurationクラスは複数に分割することができ、それぞれ異なる責務を持たせることができます。例えば、データベース設定、セキュリティ設定、サービス層の設定などを個別のクラスに分けることが可能です。

@Configuration
public class DatabaseConfig {

    @Bean
    public DataSource dataSource() {
        // DataSource設定を返す
    }
}

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityService securityService() {
        return new SecurityServiceImpl();
    }
}

このようにクラスを分割することで、設定がよりモジュール化され、保守が容易になります。


2. プロファイルの使用

@Configurationクラスは、Springの@Profileアノテーションと組み合わせることで、異なる環境ごとに設定を切り替えることができます。例えば、開発環境と本番環境で異なるデータソース設定を使いたい場合です。

@Configuration
@Profile("dev")
public class DevDatabaseConfig {

    @Bean
    public DataSource dataSource() {
        return new DevDataSource();
    }
}

@Configuration
@Profile("prod")
public class ProdDatabaseConfig {

    @Bean
    public DataSource dataSource() {
        return new ProdDataSource();
    }
}

このように、Springプロファイルを使うことで、環境に応じた設定を自動的に切り替えることができます。


3. 外部プロパティファイルの使用

@Configurationクラスでは、外部のプロパティファイル(application.propertiesapplication.yml)を読み込んで設定に利用することができます。@Valueアノテーションを使って、プロパティファイルから値を注入します。

@Configuration
public class AppConfig {

    @Value("${app.datasource.url}")
    private String dataSourceUrl;

    @Bean
    public DataSource dataSource() {
        return new DataSource(dataSourceUrl);
    }
}

この例では、プロパティファイルに定義されたapp.datasource.urlの値をdataSourceUrlに注入しています。


@Configurationの引数とオプション

@Configurationはシンプルなアノテーションですが、オプションもあります。

proxyBeanMethods
@ConfigurationアノテーションにはproxyBeanMethodsという属性があり、デフォルトでtrueに設定されています。これにより、@Beanメソッドが呼ばれるたびに新しいインスタンスを作成するのではなく、Springコンテナ内の同じインスタンスを返すようになります。

@Configuration(proxyBeanMethods = false) 
public class AppConfig { 
 // Bean定義 
} 

この属性をfalseに設定すると、@Beanメソッドが呼ばれるたびに新しいインスタンスが作成されます。


まとめ

今回は、Spring Frameworkにおける@Configurationアノテーションについて解説しました。@Configurationを使うことで、Springアプリケーションの設定をシンプルに管理でき、Beanのライフサイクルや依存関係の制御が容易になります。実際のプロジェクトでは、@Configurationを使用して柔軟な設定を行うことで、より保守性の高いコードを実現できるでしょう。

ぜひ、この記事を参考にして、@Configurationの使い方を習得し、実際のプロジェクトに活かしてみてください!


もっと詳しく知りたい方は、Spring公式ドキュメントを見てみてくださいね。

他の記事が見たい方はこちら!↓↓↓

タイトルとURLをコピーしました