【Spring Boot概念】Springのアーキテクチャ設計における3種類のBean分類
Springのアーキテクチャ設計における3種類のBean分類
~アプリケーションロジック / アプリケーションインフラ / コンテナインフラの役割とは~
Springアプリケーションを設計・理解する上で、「Beanの役割による分類」はとても重要です。公式ドキュメントに明示的に定義されている分類ではありませんが、大規模なシステム設計やクリーンアーキテクチャ実践において非常に有効な考え方です。
この記事では、以下の3つの分類に分けて、具体例とともに解説します。
- アプリケーションロジックBean
- アプリケーションインフラBean
- コンテナインフラBean
🔷 1. アプリケーションロジックBean
「アプリケーションが“何をするか”に関わる中核ロジック」
📌 定義・役割
アプリケーションのビジネスルールやドメインロジックを実装するBeanです。最も重要なアプリケーションの価値を担う部分であり、「ビジネスBean」とも呼ばれます。
💡 具体例
-
@Serviceを付与したサービス層 (OrderService,UserService) -
@Repositoryを使ったリポジトリ層 (UserRepository,OrderRepository) -
@Componentを使ったユースケースクラスやファサードクラス - DDDにおけるドメインモデル(Entity、Aggregateなど)
🧠 特徴
- アプリケーションの「本質的な価値」を提供
- 開発者が最も多くの時間を費やす領域
- 外部技術に依存しすぎず、純粋なロジックを目指す(クリーンアーキテクチャのUseCase層に近い)
🔷 2. アプリケーションインフラBean
「アプリケーションロジックを“どう動かすか”を支える技術的基盤」
📌 定義・役割
ビジネスロジックを動かすために必要なインフラ的な技術サポートを提供するBeanです。データベース接続やトランザクション、API通信、メッセージングなど、「横断的関心事(Cross-cutting Concerns)」を担うことが多いです。
💡 具体例
-
DataSource,JdbcTemplate,EntityManagerFactory -
TransactionManager,JpaTransactionManager -
RestTemplate,WebClient,ObjectMapper -
KafkaTemplate,RabbitTemplate -
@Configurationを使った各種設定クラス(AppConfig,SecurityConfig, など)
🧠 特徴
- ビジネスロジックを支える裏方の技術層
- Springや外部ライブラリに依存することが多い
- 適切な設定により、アプリケーション全体の安定性や性能に大きく影響
🔷 3. コンテナインフラBean
「Springフレームワークそのものを動かすための“内臓部品”」
📌 定義・役割
SpringのIoCコンテナが正常に機能するために内部的に使用されるBeanです。開発者が直接触れることは少ないですが、Springの「魔法のような機能」の裏側で活躍しています。
💡 具体例
-
AutowiredAnnotationBeanPostProcessor:@Autowiredを処理するBean -
CommonAnnotationBeanPostProcessor:@PostConstruct等を処理 -
ConfigurationClassPostProcessor:@Configurationクラスを解析 -
ApplicationListenerDetector:@EventListenerを検出 - 各種
BeanPostProcessor,BeanFactoryPostProcessor
🧠 特徴
- 非常に低レイヤーのBean群
- Spring本体から自動的に登録される
- フレームワークの「仕組み」に関わるため、意識する機会は少ない
🔸 3種のBean比較表(まとめ)
| 分類 | 主な役割 | 例 | 関心の焦点 | 誰が管理・定義? |
|---|---|---|---|---|
| アプリケーションロジック | ビジネスルールの実装 |
UserService, OrderRepository
|
「何をするか」 | アプリケーション開発者 |
| アプリケーションインフラ | 技術的支援や外部連携の設定 |
DataSource, RestTemplate, AppConfig
|
「どう動かすか」 | アプリケーション開発者 |
| コンテナインフラ | Springフレームワークの内部構成要素 |
BeanPostProcessor, AutowiredAnnotation...
|
Springの仕組み | Springフレームワーク自身 |
🏗 建物の比喩でイメージする
- アプリケーションロジックBean:建物の目的や用途(図書館の本棚、貸出システム)
- アプリケーションインフラBean:建物の設備(空調、電気、ネットワーク)
- コンテナインフラBean:建物を建てるための重機や技術(設計図エンジン、クレーン)
✅ まとめ
Springアプリケーションでは、すべてのBeanを同じ視点で扱うのではなく、役割ごとに階層・責任を分離して設計することが重要です。
- 保守性の向上
- 関心の分離(SoC)の徹底
- より柔軟な設計とテスト戦略の立案
こうした視点を持つことで、よりスケーラブルで分かりやすいSpringアプリケーションを構築できるでしょう。
📝 補足:
クリーンアーキテクチャやDDD(ドメイン駆動設計)を実践する際にも、この分類は非常に役立ちます。
Discussion