問題タブ [jsr330]
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 - Spring @Scope("request") を JSR-330 @Scope バリアントに置き換えることは可能ですか?
org.springframework.beans.factory.config.Scope
または、インターフェイスのカスタム実装を特定@Scope
の注釈付きアノテーションにバインドできますか?
たとえば、新しいスコープ タイプをカスタマイズしました。
今、私はそれを次のように使用したい、
それ以外の、
出来ますか?
spring-context に「AnnotationPostProcessor」のようなものはありますか?
java - @Assisted に相当する javax.inject.* はありますか
com.google.inject.* に相当するアノテーションの代わりに、JSR-330 javax.inject.* アノテーションの使用を検討しています。JSR-330 標準には、私が Guice で好きになったいくつかの機能が含まれていないようです。
具体的には、@Assisted キーワードはサポートされていません。また、@AssistedInject はどうですか? @Inject は複数のコンストラクターに配置できますか?
ベンダー中立であることには関心がありますが、便利な機能を犠牲にするつもりはありません。推奨事項はありますか?
spring - バインディング アノテーションとより具体的なインターフェイスを使用する必要があるのはいつですか?
質問
次のいずれかを決定する際に使用する基準は何ですか。
- アノテーションで依存関係を指定し、
- より具体的なインターフェースで依存関係を指定する
例
私が持っているとします:
にバインドFooLoader
したいとしCachingFooLoader
ます。これを配線するには [少なくとも] 2 つの方法があります。
注釈バインディングを使用する
変化する:
に:
その後:
より具体的なインターフェースを作成する
変化する:
に:
where はNonCachingFooLoader
単に extendsFooLoader
をDBFooLoader
実装しNonCachingFooLoader
、それに応じて接続します。
私の考え
私は複数の理由で注釈バインディングを使用することに惹かれています。
- キーはインターフェイスよりも簡単に再利用できるため、インターフェイスが被る組み合わせの爆発が減少します。
- 侵襲性が低くなります。構成は、クラスを「汚染」するのではなく、Guice モジュールにとどまります。
ただし、より具体的なインターフェイスを作成することには利点もあります。
- インターフェイスにはより多くの意味があります。通常、Guice だけが注釈を読み取りますが、インターフェイスはさらに多くの用途に使用されます。
では、どのアプローチを採用するかを決定するには、どのような基準を使用する必要がありますか?
(春のユーザーは、私が知る限り、これは修飾子と呼ばれるものです。)
java - Guice と JSR-330
JSR-330 は、パッケージに関して特定の命名規則を指定します。次に例を示します。
Guice は JSR-330 のリファレンス実装です。しかし、使ってみると仕様にそぐわないことに気づきます。例えば:
これは、これまでに見た参照実装のいずれでも発生しません。Google Guice が RI であるため、実装している仕様を無視できるほど特別な理由は何ですか?
java - Springの@Valueアノテーションに相当するJSR-330はありますか?
Spring3でJSR-330アノテーションを使用しようとしています。
@Value
プロパティ値を挿入するためのSpringのアノテーションに相当するJSR-330はありますか?たとえば@Provider
、Springにプロパティ値を挿入するように指示する方法で使用できますか?
java - Glassfish で JSF 2.0 に CDI @Alternative をインスタンス化するように指示する方法?
JSF 1 から移行された Glassfish 3.1.1 で実行されている JSF 2.0 アプリケーションがあります。
これは#{OnlineBeanHandler}
、facelet ページで使用できるようにするために行われました。うまくいきます。また、OnlineBeanHandler内で@ javax.inject.Inject を使用して CDI マネージド Bean を取得することもできます。これを @javax.enterprise.inject.Alternative としてマークし、beans.xml で有効にすることで代替手段を提供できます。うまくいきます。
ここで、OnlineBeanHandler 自体に対して同じメカニズムを機能させる必要があります。つまり、<managed-bean>
-handling コードで、明示的に指定されたクラスではなく代替クラスを呼び出しますが、同じ手順を実行すると、代替クラスの代わりに基本クラスが取得されます。
これを直接行うことはできますか?
どうやら、このメカニズムはそこでは機能しません。現在の状況では、さらに別のfaces-config.xmlファイルを作成して、そこにあるプロジェクトによってそれらをオーバーライドするだけで済みます。その後、代替の faces-config.xml が各プロジェクトによって提供されます。
java - Java: リフレクションを使用して、メソッドがオーバーライドされているかどうかを確認する方法
リフレクションを使用して、JSR-330 アノテーション付きクラスの依存関係を判別するために何らかの処理を行う必要があります。
Spring、Guice、PicoContainer など、JSR-330 準拠のすべての IoC コンテナーを十分に認識しています。ただし、依存関係を解決して注入するのではなく、依存関係を特定する必要があります。
つまり、少なくともリフレクション クラスの「解析」に関しては、JSR-330 実装を実装する必要があるということです。
JSR-330 仕様には、実装するのが少し面倒だと思う部分が 1 つあります。
@Inject でアノテーションが付けられた別のメソッドをオーバーライドする @Inject でアノテーションが付けられたメソッドは、インスタンスごとに注入リクエストごとに 1 回だけ注入されます。@Inject でアノテーションが付けられたメソッドをオーバーライドする @Inject アノテーションのないメソッドは注入されません。
つまり、サブクラスは、基本クラスのオートワイヤリング コントラクトを再定義できるだけでなく、(ポリモーフィズムを通じて) インジェクション フローにフックすることもできます。
ここに私の質問があります:クラス階層が与えられた場合、階層のある部分のメソッドが階層のさらに下にオーバーライドされているかどうかを確認する簡単な方法はありますか?
私の場合、これを行う最も簡単な方法は、階層のリーフからの再帰を使用することです。
overriddenBy グアバのような述語については、次のことを確認します。
- クラスを定義するメソッドは isAssignableFrom 関係にあります
- メソッド名が同じ
- メソッドの仮パラメータは同じです
結果の複雑さは、階層内のメソッドの数に関して O(n^2) になります。
それを達成するためのより簡単で効率的な方法、またはそのような機能を備えたライブラリがあるかどうか疑問に思っていました。Guava と Apache Commons の両方で失敗しました...
java - JSR Bean Validation と複数のグループ、AND と OR
すべてのグループ句が満たされた場合にのみ適用される制約が必要な人はいますか? つまり、
いずれかのグループが有効な場合、not null 制約が適用されます。
両方のグループが有効なときに制約を適用したい場合はどうすればよいですか?
私のアプリケーションにはカスタム グループの組み合わせが多数あるため、カスタム グループを使用することはできません。
spring - テストの注入方法-テスト中の実装、本番-本番モードでの実装-Spring、JSR-330
シーケンサーと次のBeanがあると仮定しましょう。シーケンサーは、データベースシーケンスから次の値を取得する責任があります。OracleSequencerは、本番モードで使用され、JUnit-Testsの間にTestSequencerが使用されます。
そして、これが私がそれを使いたい方法です:
私の問題は次のとおりです。本番モードでアプリを実行するときに、BusinessBeanにOracleSequencerを注入したいのですが、JUnit - Testを実行するときに、TestSequencerを注入したいと思います。JSR-330(@ Inject、@ Named)で可能ですか?
私は2つの汚い解決策を見つけました:
テストの開始時に、Spring-ApplicationContextから取得したBeanでSequencerを置き換えることができます。プロトタイプが適切であり、TestSequencerに他の依存関係がない場合に可能です。
BusinessBean Bean = springContext.getBean(..); bean.setSequencer(new TestSequencer());
OracleSequencerに@ProductionScopeを使用して注釈を付け、TestSequencerに@TestScopeを使用して注釈を付け、適切な注釈を適切なモードでスキャンするようにSpringを構成できます。
この問題を解決する方法について他に何かアイデアはありますか?
春3.1。