Spring FrameworkにおけるBean管理の詳細

Spring Frameworkでは、@Componentやその派生アノテーション(@Controller、@Service、@Repository)を使用してIOCコンテナ内のBeanを宣言できます。本記事では、IOCコンテナにおけるBeanの詳細な使用方法について解説します。

1. IOCコンテナからのBean取得方法

Spring Bootアプリケーション起動時、IOCコンテナが自動的に作成され、Beanオブジェクトが生成されます。以下の方法でコンテナからBeanを取得できます:
// 名前でBeanを取得
Object getBean(String name)

// 型でBeanを取得
<T> T getBean(Class<T> requiredType)

// 名前と型でBeanを取得
<T> T getBean(String name, Class<T> requiredType)

実装例

@SpringBootTest
class ApplicationTests {
    @Autowired
    private ApplicationContext context;

    @Test
    public void testBeanRetrieval() {
        // 名前で取得
        UserController bean1 = (UserController)context.getBean("userController");
        
        // 型で取得
        UserController bean2 = context.getBean(UserController.class);
        
        // 名前と型で取得
        UserController bean3 = context.getBean("userController", UserController.class);
    }
}

2. Beanのスコープ設定

Springでは5種類のスコープをサポートしています:
スコープ説明
singleton単一インスタンス(デフォルト)
prototype毎回新規インスタンス
requestリクエストごとに新規インスタンス
sessionセッションごとに新規インスタンス
applicationアプリケーションごとに新規インスタンス
@Scopeアノテーションでスコープを設定できます:
@Component
@Scope("prototype")
public class CustomBean {
    // ...
}

3. サードパーティBeanの管理

サードパーティライブラリのクラスをBeanとして登録するには@Beanアノテーションを使用します:
@Configuration
public class AppConfig {
    @Bean
    public ThirdPartyLibrary thirdPartyBean() {
        return new ThirdPartyLibrary();
    }
}

4. Beanの注入方法

フィールド注入

@Service
public class MyService {
    @Autowired
    private Repository repository;
}

コンストラクタ注入

@Service
@RequiredArgsConstructor
public class MyService {
    private final Repository repository;
}

メソッド注入

@Service
public class MyService {
    private Repository repository;

    @Autowired
    public void setRepository(Repository repository) {
        this.repository = repository;
    }
}

タグ: SpringFramework Bean管理 IoC DI SpringBoot

5月28日 21:28 投稿