0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IntelliJ の Spring 実行時インサイトで、注入された Bean をコード上で確認する

0
Last updated at Posted at 2026-07-07

はじめに

Spring アプリケーションを触っていると、「このクラスには、実際にはどの Bean が注入されているのか」を確認したくなることがあります。

public OrderController(OrderService orderService) {
    this.orderService = orderService;
}

このコードを見ると、OrderService がわたされていることはわかります。
しかし、実行時にどの Bean が使われているのか、どこで定義された Bean なのか、関連する Bean はなにかまでは、このコードだけではわかりません。

IntelliJ IDEA 2026.1 の Spring 実行時インサイトでは、コード内の注入された Bean を確認できます。

公式の説明では、Spring コンポーネントに注入された正確な Bean クラス、Bean の定義、関連 Bean、Bean 定義クラスやファクトリメソッドへの移動ができると紹介されています。

この記事では、この Injected beans in code の機能をご紹介いたします。

Spring の DI と Bean

DI は Dependency Injection の略です。

簡単にいうと、クラスが必要とする別のオブジェクトを、自分で new して作るのではなく、外側から渡してもらう仕組みです。

Spring では、@Controller@Service@Repository@Component@Bean などで管理対象になったオブジェクトを Bean と呼びます。

たとえば、この Controller は OrderService を必要としています。

@RestController
@RequestMapping("/orders")
public class OrderController {

    private final OrderService orderService;

    public OrderController(OrderService orderService) {
        this.orderService = orderService;
    }
}

このとき、OrderController 自身が OrderService を作るわけではありません。
Spring が OrderService の Bean を探し、Controller に渡します。

この「Spring がどの Bean を渡したのか」をコード上で見られるのが、今回扱う機能です。

なぜ実行時の Bean を見たいのか

小さなアプリでは、注入される Bean はすぐわかります。
しかし、アプリが大きくなると、次のような理由でわかりにくくなります。

  • 同じ型の Bean が複数ある
  • @Primary が付いた Bean が優先される
  • @Qualifier で注入先が指定される
  • @Profile で実装が切り替わる
  • @ConditionalOnProperty などの条件で Bean が有効・無効になる
  • @Bean メソッドやファクトリメソッドから Bean が作られる

つまり、コード検索だけでは「候補」はわかっても、「実行時に実際に選ばれた Bean」まではわかりにくいことがあります。

この確認のために毎回ブレークポイントで止めるのは手間です。
Spring 実行時インサイトを使うと、アプリを動かしたまま、エディター上で注入された Bean を確認できます。

このリポジトリで見る場所

このリポジトリでは、次のファイルを見るとわかりやすいです。

spring-demo-project/src/main/java/com/example/order/OrderController.java

注目するのは、コンストラクタ引数の OrderService です。

public OrderController(OrderService orderService) {
    this.orderService = orderService;
}

ここで見たいのは、orderService に実際にどの Bean が注入されているかです。
image.png

Injected beans in code で確認したいこと

見るもの なにがわかるか
注入された Bean クラス 実行時にどのクラスの Bean が入ったか
Bean の定義 その Bean がどこで定義されたか
関連 Bean その Bean と関係する Bean
定義元への移動 Bean 定義クラスやファクトリメソッドへ移動できるか

重要なのは、推測ではなく、実行中の Spring アプリケーションで実際に選ばれた Bean を見られることです。

たとえば、OrderService に複数の実装がある場合でも、エディター上で「今この起動状態ではどれが入っているか」を確認できます。
image.png

ブレークポイントなしで確認できる

この機能の良いところは、アプリケーションを止めずに確認できることです。

Injected beans in code が使えると、エディター上で注入結果を確認できます。

  1. Spring アプリをデバッグモードで起動する
  2. Controller や Service を開く
  3. コンストラクタ引数やフィールドを見る
  4. 注入された Bean クラスと定義元を確認する
  5. 必要な場合だけブレークポイントを使う

最初から止めるのではなく、動いている状態の Bean を見ることができます。

使うときの前提

この機能は、実行中の Spring アプリケーションの状態を見る機能です。
そのため、対象アプリケーションをデバッグモードで実行しておく必要があります。

また、Spring デバッガープラグインが有効であること、IntelliJ IDEA Ultimate を使っていることも確認しておく必要があります。
image.png

まとめ

Injected beans in code は、Spring コンポーネントに実際に注入された Bean をコード上で確認する機能です。

  • 実際に注入された Bean クラスがわかる
  • Bean の定義や関連 Bean を確認できる
  • Bean 定義クラスやファクトリメソッドへ移動できる
  • アプリを止めずに、実行中の状態をコード上で確認できる

Spring の DI は便利ですが、実行時にどの Bean が選ばれたかは、起動条件や設定によって変わることがあります。

「この依存には、実際にはどの Bean が入っているのか」

それをコード上で確認できるのが、この機能のわかりやすい価値だと思います。

ナットウシステムからのお知らせ

弊社は JetBrains 製品に関するご質問、ご相談等を受け付けております。弊社のXまたはメールでご連絡ください。

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?