@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.properties
やapplication.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公式ドキュメントを見てみてくださいね。
他の記事が見たい方はこちら!↓↓↓