Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
22
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@BooookStore

Springフレームワークにて、アノテーションベースConfigurationでプロファイルを設定し利用する方法

Spring DI

Configuration

SpringフレームワークではDIコンテナに対してConfigurationと言う設定ファイルを渡し、「こんな時には、このインスタンスを返してね」と設定する。そのConfigurationファイルの種類は3つある。

  • JavaベースConfiguration
  • XMLベースConfiguration
  • アノテーションベースConfiguration

以下ではアノテーションベースのConfigurationについて説明する。

アノテーションベースのConfiguration

@Configuration

Configurationクラスであることを表す。

AppConfig
package com.example;

@Configuration
public class AppConfig {

}

@Component

DIコンテナに管理させるBeanとして、クラスを登録する。

User
package com.example;

@Component
public class User {

  public String getName(){
    ...
  }

}

@ComponentScan

@Componentが付与されたクラスをスキャンし、BeanとしてDIに登録する。スキャン対象は、パッケージとして指定することができる。先ほどのAppConfigクラスに対して、設定を行うと以下のようになる。

Configuration
package com.example;

@Configuration
@ComponentScan("com.example")
public class AppConfig {

}

アノテーションベースConfigurationのサンプルコード

以上のアノテーションを使用してDIコンテナを利用すると、以下のようなコードになる。

DemoIoC
package com.example;

public class DemoIoC {
  public static void main(String args[]){

    // DIコンテナを構築し、Configurationファイルを渡す
    AnnotationConfigApplicationContext context =
                      new AnnotationConfigApplicationContext(AppConfig.class);

    // Beanを取得
    User user = context.getBean(User.class);
    System.out.println(User.getName())
  }
}

Profile設定

SpringフレームワークではConfigurationをグループ化して、プロファイルとして管理することができる。例えば、開発用のConfiguration、テスト用のConfiguration、製品用のConfigurationと、分けて管理し、Configurationを簡単に切り替えることができる。

@Profile

プロファイルを設定する。先ほどのUserクラス階層を以下の様に変更してプロファイルを設定してみる。

User
package com.example;

public interface User {
  public String getName();
}
UserDummy
package com.example;

@Component
@Profile("dev") // devという名前でプロファイルを設定
public class UserDummy implements User {
  ...
}
UserMaster
package com.example;

@Component
@Profile("test") // testという名前でプロファイルを設定
public class UserImpl implements User {
  ...
}

Profileの利用例

以上のUserクラス階層を、プロファイルを設定して利用してみる。

DemoIoC
package com.example;

public class DemoIoC {
  public static void main(String args[]){

    // DIコンテナを構築
    // プロファイルとしてdevを設定
    AnnotationConfigApplicationContext context =
                      new AnnotationConfigApplicationContext();
    context.register(AppConfig.class);
    context.getEnvironment().addActiveProfile("dev");
    context.refresh();

    // Beanを取得
    // userの実装はUserDummy
    User user = context.getBean(User.class);
    System.out.println(User.getName())
  }
}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
22
Help us understand the problem. What are the problem?