問題タブ [spring-ioc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
dependency-injection - 春の @Component の使用は何ですか?
Guice には同様の概念がありません。たとえば、Guice は、特別なクラス アノテーションを必要とせずに、デフォルトのコンストラクターを使用して任意のクラスを自動的に注入できます。spring が起動時にすべての Bean について知る必要があるのはなぜですか? 自動配線の目的で、クラスパスからクラスをルックアップするだけでは春になりませんか? 私が考えることができる 1 つの理由は、AOP のためです。しかし、AOP を使用していない場合、Bean 定義の計算全体によって、まったく不要なかなりの量の起動時間が追加されます。
編集:
明示的に、クラスパスからオンデマンドでクラスをルックアップする春が欲しい
Foo
そのため、Springを使用して Bean を作成すると、クラスパスを簡単に検索できるようにするgetBean()
必要があることがわかります。これは Guice が行うことであり、開発中に非常に遅くなる不必要なコンポーネントのスキャンを回避します。Bar
Bar
java - Spring xml と Java 構成でのクラス型注入
このように X をインスタンス化します。
コードをビルドすると、 required Class<B>
foundと不平を言いますClass<C>
。C は B を拡張するので、C.class を使用できませんか? もしそうなら、誰かが理由を説明できますか?
Spring の XML ベースの Bean を使用して同じことを行い、問題なく動作します。Bean の定義は次のようになります。
これはうまくいきます。Java でのインスタンス化が失敗する理由がわかりません。
java - AnnotationConfigApplicationContext.getBean は別の Bean、Spring を返します
ClassA を注入する必要があるという問題があり、ClassARoomService
で見つかったのは正常に動作し、roomService の ID は同じです。
何らかの理由で、入力パラメーターに基づいてルームインスタンスを作成するためにルームサービスが必要なので、以下の構成を使用してこれを実現します。
問題は、RoomService
シングルトンにする必要があることですが、 Application.java で、 ctx.getBean(roomService) が常に異なる ID を持つ異なる Bean を返すことがわかりました。Spring は同じ Bean を再利用するべきではありませんか? 何故ですか?
RoomService.java で部屋を作成する方法は次のとおりです。
更新: 同じ ctx を再利用しようとしましたが、機能しません。ヒントの 1 つは、RoomService()
Tomcat を実行して開始するときに、コンストラクターが数回呼び出されていることを発見したことです (ブレークポイントを入れました)。
これが私のweb.xmlです
助けてください!
java - Spring Injection で Builder パターンを使用するには?
TL;DR: Spring IoC で Builder パターンの構成を使用するにはどうすればよいですか?
一部のフィールドの分布パラメーターに基づいてテーブルにデータを入力する Spring プロジェクトを作成しています (つまり、レコードの 50% がタイプ A、タイプ B の 40%、タイプ C の 10% である必要があります。タイプごとに 50% がサブタイプでなければなりません)。 1、サブタイプ 2 の 20%、サブタイプ 3 の 10% など)。
レコードの作成を高速化するために、これらのパラメーターの分布を計算し、RecordBuilder のリストを返す RecordFactory があります。各 RecordBuilder は Callable インターフェースを拡張して、レコードを同時に処理して返すようにします。
これまでに行ったことは、タイプ A、B、および C だけを考慮して、タイプごとに異なる ProcessorFactory 実装を返す TypeABuilder、TypeBBuilder、および TypeCBuilder を作成することでした。
しかし、明らかに、これは悪い設計です。プロジェクトがより複雑になると、可能な組み合わせごとに mxn クラスが必要になります。
より良い設計は、構成を使用し、必要なパラメーターに従って DataBuilder を作成することです。Spring IC の利点を失わずにこれを行うにはどうすればよいですか?
アップデート:
RecordFactory が ProcessorFactory を構築する方法を変更しました。個別の Builder オブジェクトの代わりに、必要に応じて Builder パターンを使用して ProcessorFactory を作成する 1 つの Builder オブジェクトがあります。
今私の問題は次のとおりです。ビルダーで新しい ProcessorFactoryImpl を作成すると、プロセッサを挿入できません。そのような柔軟性を維持しながら、Spring でビルダー パターンを使用するにはどうすればよいですか?
java - Spring の IoC コンテナに設定なしで Bean をインスタンス化させる (Google Guice の動作と同様)
Spring に移行したい趣味のプロジェクトがあります。
例として、次のクラスがあります。
ただし、ドキュメントを読むと、Spring によって管理されるすべてのクラスに、@Component (または同様のもの) などの注釈を付けて注釈を付ける必要があります。
次のコードで実行します。
エラーが表示されます:
私の質問は、Spring が ApplicationContext にインスタンス化するように要求するクラスをAnnotated Config (または XML 構成) に登録しなくても管理できるようにする方法はありますか?
Guice では、クラスに注入するだけです
出力が得られます:
とにかくSpringをGuiceのように動作させることはできますか? @Component のようなアノテーションが付けられたクラスのパッケージを登録またはスキャンすることなく、Spring に Bean を注入させるようにするにはどうすればよいでしょうか。
この問題を解決する方法を持っている春の達人はいますか?