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;
}
}