0
ここでは、一方のクラスは他方のサブクラスです。したがって、@ Injectのあいまいさを防ぐために、@Typed注釈が使用されます。CDIで@Typedを使用したサブクラス実装によるあいまいな依存関係の警告
public class A {
@Inject UserScope userScope;
}
あいまい依存:
@Dependent public class UserScope extends Scope {} @Dependent @Typed(UserScopeAllowIdEquals.class) // Restrict bean type. public class UserScopeAllowIdEquals extends UserScope {}
は、以下の使用量はのIntelliJに警告検査を引き起こす
しかし 注入点と一致する複数のBean、アプリケーションのコンパイルがありますコンテナはそれを定義エラーとして扱わない。それが書かれている方法に問題はありますか?私は、this answer to a different questionが正しい場合、スーパークラスを含むBeanタイプのBeanが1つしかないことを示すためには、そうではないと思われます。
注:次の使用方法は、Intellij検査の警告を引き起こしません。 CDIに基づいて
public class B {
@Inject UserScopeAllowIdEquals usaie;
}
にdefaultを修飾子を追加した後:あなたは
Scope
Beanを注入行うときに、任意の修飾子なし、その後、明示的にデフォルトに指定されたBeanが選択されます'UserScope'私はまだ' UserScope'を注入する "あいまい依存"警告を受けています。混乱を避けるために、Scopeの基本クラスは抽象クラスなので、スコープは決して挿入しません。 –
@PatrickGarner具体的な実装ではなく、抽象クラスを実際に注入する必要があります – maress
データベーステーブルごとに1つのスコープタイプ、RoleScope、PermissionScope、AcademicYearScope、TransitionLogScopeなどを注入する必要があります。これらのすべてがスコープを拡張します。 UserScopeAllowIdEqualsは束の奇妙な唯一のもので、ScopeではなくUserScopeを拡張しています。 –