問題タブ [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.
java - Bean のすべての @Configuration 命名規則は何ですか?
システム内の多くの Bean の 1 つを模擬することになっている統合テストがいくつかあります。これを行うには、@Configuration
次のような があります。
が のないRealBean
Java クラスの場合、このメソッドが使用されることに気付きました。しかし、がの場合、このコンテキスト メソッドを次のように変更する必要があります。 @Component
RealBean
@Component
このメソッド名を変更する必要がある理由と、これらすべてのルールをどこで見つけることができるかを誰か説明できますか? これらの「なぜMockContext
正しく動作しないのですか?」のトラブルシューティングには非常に長い時間がかかります。問題。
FWIW、テストでこのコンテキストを使用する方法は次のとおりです。
そして、私の統合テストはこのクラスを拡張します。Spring Boot 1.2.4.RELEASE を使用しています
spring-ioc - Spring IOC で複数の xml Bean ファイルをロードする方法
springIOC コンテナー (BeanFactory または AppilcationContext のいずれか) に複数の Bean xml 構成ファイルをロードする方法。
java - Spring MVC テストの失敗
Spring MVC テストを実行しようとしていますが、この例外が引き続き発生します。
org.springframework.web.util.NestedServletException: リクエストの処理に失敗しました。ネストされた例外は java.lang.NullPointerException です
自動配線された依存関係のために例外が発生しています。
テストに注入されていません(テスト外では正常に動作します)。
誰でもこれで私を助けることができますか?これが私のコードです:
//AccountControllerITest クラス
}
//アカウントコントローラー
}
助けてくれてありがとう!
java - Spring DI の美しさ - コンパイル時ではなく実行時に依存関係を解決することは、Java ベースの構成で失われましたか?
Spring Dependency Injection を使用すると、ハードコーディングされた依存関係をコードから削除でき、コンパイル時ではなく実行時に依存関係を解決できます。
数年前、私たちは 2 つの国で実施されたプロジェクトに取り組んでいました。ほとんどすべてのモジュールは、1 つのモジュールの税計算を除いて同じでした。
計画では、2 つの異なる国で 2 回パッケージ化する代わりに、プロジェクトを両方の国で 1 回だけパッケージ化します。
したがってTaxCalculationService
、1 つのメソッドに対して 1 つのインターフェイスがありました。calculateTax(...)
インターフェイスTaxCalculationServiceImpl
を実装する 2 つの国用の 2つの異なるクラスTaxCalculationService
以下のように
calculateTax(...)
マネージャー クラス ( ) からメソッドを呼び出しましたTaxCalculationManagerImpl
。
そして、戦争の外側のフォルダーに保持されている春の構成ファイルがありました/home/config/
両方の戦争が 2 つの異なるサーバーにデプロイされました。同じ戦争が 1 回パッケージ化されました。違いは、Spring 構成ファイルだけです。
国 B の場合、Bean ID " taxCalculationService
" でクラス名を変更する必要があります。他には何もありません
そのため、再コンパイルを行わずに、パッケージ化して、両方の国で同じアプリケーション ウォーを簡単に使用し、Spring 構成ファイルのみを変更しました。
しかし、Spring - Java ベースの構成では、同じシナリオを実装したい場合、どのようにそれを行うのでしょうか?
Bean を作成している間、新しい演算子を使用して特定の実装クラスを作成しています。
国Aに同じインターフェースTaxCalculationService
と TaxCalculationServiceImplForCountryA
クラスを使用する場合、次のようにする必要があります
国 B については、次のようにする必要があります。
したがって、この場合、新しい演算子を使用して、特定の国向けの TaxCalculationService の特定の実装クラスを作成する必要があります。したがって、再コンパイルや戦争のパッケージ化を行わずに、xml ベースのスプリング構成でどんなに柔軟性があったとしても、Java ベースの構成アプローチでは達成できない戦争を再利用しました。
taxCalculationManager は taxCalculationService に依存しており、taxCalculationManager が XML ベースの Spring 構成で実行時に決定される TaxCalculationServiceImplForCountryA または TaxCalculationServiceImplForCountryB の calculateTax(...) を呼び出すかどうかに依存します。
しかし、getTaxCalculationService() が new TaxCalculationServiceImplForCountryA() または new TaxCalculationServiceImplForCountryB() を返すことを Java コードで指定する必要がある場合、基本的に実行時に解決されません。
したがって、taxCalculationManager の taxCalculationService への依存関係は実行時に解決されず、基本的にコンパイル時に解決されます。
Spring - Java Based Configuration では、コンパイル時ではなく実行時に依存関係を解決する Spring DI の美しさが失われていると思いませんか?
java - コンストラクターで Bean と値を接続する
私は春を使用しています。私はこのクラスを持っています:
私はプロパティを配線するのが本当に嫌いで、コンストラクターを使用することを好みますが、「クラス FooService のコンストラクター FooService は特定の型に適用できません」という奇妙なメッセージが表示されます。この場合、工事用配線は使用できますか?
spring - の範囲と階層的なコンテキストで
読みました:
Spring MVC の ApplicationContext と WebApplicationContext の違いは何ですか?
<context:component-scan /> がディスパッチャ コンテキストではなくアプリケーション コンテキストにある場合、@RequestMapping アノテーションが機能しない(これについては後で詳しく説明します)
他にもいくつかありますが、これらのどれも質問に答えていません:
Spring MVC アプリケーションの ROOT コンテキストに存在する場合、スコープが<context:component-scan.../>
制限されるのはなぜですか?
私の理解では、指定されたパッケージ内のすべてのクラスのスキャンが発生し、ステレオタイプ化された Bean@Component
またはそのサブステレオタイプ ( @Repository
、@Service
および@Controller
) のいずれかがインスタンス化されます。
与えられた:
applicationContext.xml (ルート コンテキスト)
main-servlet.xml (サーブレット コンテキスト)
com/myproject/web/MainController.java
Spring のドキュメントには、ルート コンテキストでインスタンス化されたすべての Bean が共有され、個々のサーブレット アプリケーション コンテキストで使用できると記載されています。したがって、<context:...>
ルート コンテキストでの 2 つの宣言により、サーブレット コンテキストで表示される Bean が生成されます。しかし、そうではないようです。サーブレットのコンテキストで<context:component-scan.../>
両方を繰り返す必要があります。<context:property-placeholder.../>
<context:component-scan.../>
サーブレット コンテキストでを省略すると、
@Controller
が解決されなかったことを示します。
処理されていないプロパティ参照を使用<context:property-placeholder.../>
した注釈の結果を省略すると、私の場合、いくつかの壊れたリンクが発生します。@Value
これらの<context:.../>
ディレクティブは両方とも Bean のインスタンス化につながるため、ドキュメントとは正反対に、Bean が子コンテキストで表示されない理由について混乱しています。また、component-scan
ステートメントが 2 つあると、コントローラー Bean が 2 回インスタンス化されることはありませんか?
<context:component-scan /> がディスパッチャ コンテキストではなくアプリケーション コンテキストにある場合、@RequestMapping アノテーションが機能しないことに関しては<mvc:annotation-driven />
、アプリ コンテキストにあり、ここでの回答では 2 つのcomponent-scan
ステートメントが必要な理由が説明されていません。
「魔法」がどのように機能するかを完全に理解し、何かを微調整したときにどのように動作するかを予測できない限り、「魔法」を使用するのは本当に不快です。したがって、「両方の場所に追加して先に進む」という「解決策」は受け入れられません。
java - 春に初期化された Bean はどのくらい生きますか?
サーバー上で Bean のメソッド (メソッド A としましょう) の最初の申請を実行すると、すべて問題ないように見えますが、このキャリア RESTWS Bean (メソッド B としましょう) で任意の申請を 2 回目に実行すると、使用される dao は同じです。キャリアDAOインスタンス。このキャリアRESTWS Beanが呼び出されるたびに、この問題を回避し、インジェクションでdaoの新しいインスタンスを使用するようにするにはどうすればよいですか?
xml ファイル内の Beans 構成:
java - Spring IC コンテナーでの注入順序の一覧表示
いくつかの Bean のリストを注入しているとします。
この状況でのデフォルトの注入順序は何ですか?
Ordered
インターフェイスと注釈については知っていますが、@Order
デフォルトの動作についてのみ質問しています。
私が気付いたのは、手動の Bean 登録の場合です。
この Bean は、登録したときとまったく同じ順序で注入されます。リスト内の 1 つの要素は SomeBeanA、2 — SomeBeanB、3 — SomeBeanC です。
この動作の保証はありますか? 今後のリリースで変更されないことを確信できますか?
ありがとう。