Spring フレームワークを使用する場合、クラスが @Service や @Autowire を使用する場合、この依存関係注入メソッドが別のクラスの他のオブジェクトを参照することは誰もが知っていることですが、このクラスは Spring の IOC 重みを通じてのみ取得できます。たとえば、依存オブジェクトは正しく初期化できますが、それ以外の場合、依存オブジェクトは null になります。
そこで、通常のクラスで Spring IOC コンテナ (Spring 管理 Bean) 内の Bean を取得する方法について質問があります。
Spring の ApplicationContext コンテキスト オブジェクトが Bean を取得するための基礎であることは誰もが知っています。
Spring Boot では以下の 3 つの方法で Bean を取得できます。
メソッド 1 アノテーション @PostConstruct
PostConstruct アノテーションは、初期化を実行するために依存関係の注入が完了した後に実行する必要があるメソッドで使用されます。このメソッドは、クラスをサービスに配置する前に呼び出す必要があります。
依存関係の注入をサポートするすべてのクラスは、このアノテーションをサポートする必要があります。 PostConstruct のアノテーションが付けられたメソッドは、クラスがリソースの注入を要求していない場合でも呼び出す必要があります。このアノテーションを付けられるメソッドは 1 つだけです。
PostConstruct アノテーションを適用するメソッドは、次のすべての標準に準拠する必要があります。
メソッドには、EJB インターセプタ (インターセプタ) の場合を除き、パラメータを含めることはできません。 EJB 仕様。この場合、InvocationContext オブジェクトが含まれます;
このメソッドの戻り値の型は void である必要があります;
このメソッドはチェック例外をスローしてはなりません;
PostConstruct を適用するメソッドは public または protected にすることができます, package private または private;
アプリケーション クライアントを除き、メソッドを static にすることはできません;
メソッドは Final にすることができます;
メソッドがチェックされていない例外をスローする場合、クラスをサービスに入れてはなりません 、例外を処理し、例外から回復できる EJB でない限り。
方法2 起動クラス ApplicationContext
実装方法: springboot 起動クラスに静的変数 ApplicationContext を定義し、コンテナの getBean メソッドを使用して依存オブジェクトを取得します。
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; /** * @author: clx * @version: 1.1.0 */ @SpringBootApplication public class Application { public static ConfigurableApplicationContext ac; public static void main(String[] args) { ac = SpringApplication.run(Application.class, args); } }
メソッドの呼び出し
/** * @author: clx * @version: 1.1.0 */ @RestController public class TestController { /** * 方式二 */ @GetMapping("test2") public void method_2() { AutoMethodDemoService methodDemoService = Application.ac.getBean(AutoMethodDemoService.class); String test2 = methodDemoService.test2(); System.out.println(test2); } }
方法 3 ApplicationContext の手動挿入
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * springboot静态方法获取 bean 的三种方式(三) * @author: clx * @version: 1.1.0 */ @Component public class StaticMethodGetBean_3<T> implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { StaticMethodGetBean_3.applicationContext = applicationContext; } public static <T> T getBean(Class<T> clazz) { return applicationContext != null?applicationContext.getBean(clazz):null; } }
メソッドの呼び出し
/** * 方式三 */ @Test public void method_3() { AutoMethodDemoService autoMethodDemoService = StaticMethodGetBean_3.getBean(AutoMethodDemoService.class); String test3 = autoMethodDemoService.test3(); System.out.println(test3); }
以上がSpring Boot で Bean を取得するにはどのような方法がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。
