はじめに
Spring を学んでいると必ず出てくる言葉、Bean(ビーン)。
「なんとなく聞いたことはあるけれど、説明しようとすると曖昧になる…」 そんな方も多いと思います。
この記事では、Bean を やさしく・実務で役立つ形 で整理します。 まずはコードを見て、そこから少しずつ理解していきましょう。
まずはコードを確認
@Service
public class GreetingService {
public String greet() {
return "Hello!";
}
}この GreetingService クラスは、@Service が付いていることで
Spring によって Bean として管理されるオブジェクト になります。
コードのしくみを解説
Bean とは
一言でいうと、
Spring が管理してくれる“オブジェクト”のこと
です。
もう少し丁寧に言うと、
- Spring が作って
- Spring が保持して
- Spring が必要な場所に渡してくれる
そんな“特別扱いされるオブジェクト”のことを Bean と呼びます。
Bean が生まれる条件
以下のいずれかで定義されたクラスは Bean になります。
- @Component
- @Service
- @Repository
- @Controller / @RestController
- @Configuration
- @Bean メソッドで返されたオブジェクト
これらはすべて IoCコンテナに登録され、 アプリケーション全体で使い回されます。
Bean と IoCコンテナの関係
Bean は IoCコンテナの中に置かれる“部品” のようなものです。
IoCコンテナが
- Bean を作り
- Bean を管理し
- DI を通して必要な場所に渡す
という流れでアプリケーションが動いています。
あわせて知っておきたいポイント
Bean のスコープ
Bean には「どのくらいの期間生きるか」というスコープがあります。
代表的なものは以下の通りです。
- Singleton(デフォルト) アプリ全体で1つだけ作られる
- Prototype 呼ばれるたびに新しく作られる
- Request / Session Webアプリ向けのスコープ
特に Singleton は実務でよく使われます。
Bean の名前
Bean には名前が付きます。
クラス名をキャメルケースにしたものがデフォルトです。
例: GreetingService → greetingService
Bean のライフサイクル
Bean は
- 作成
- 初期化
- 破棄
まで Spring が面倒を見てくれます。
使うときに気をつけたいこと
new で作ると Bean にならない
自分で new すると、IoCコンテナの管理外になります。
DI が効かなくなるので注意が必要です。
コンポーネントスキャンの範囲
Bean が見つからない場合、
パッケージ構成が原因のことがあります。
同じ型の Bean が複数あると注入に失敗する
NoUniqueBeanDefinitionException が出ることがあります。 @Qualifier で指定するなどの対処が必要です。
まとめ
Bean は Spring のアプリケーションを構成する“部品”のような存在です。
IoCコンテナに登録され、DI を通して必要な場所に渡されます。
難しく聞こえますが、
「Spring が管理してくれる特別なオブジェクト」
と理解できれば十分です。

Bean は Spring の基礎ですが、最初は少し抽象的に感じるかもしれません。
コードを書きながら触れていくと、自然と理解が深まっていきます。
あなたの開発が、今日より少しだけ楽になりますように。

Bean って、Spring さんが大事に育ててくれる“ちいさな部品”なんだね。

コメント