1

私は拡張アプリケーション用のベースコードであるセットパッケージを持っています。私のアプリケーションでは、実行時にスプリングによって注入される一連のインターフェイスが実装されています。私はインターフェイスを実装するクラスが注入されたかどうかを知ることができる方法があることを知りたいと思います。これは私が実行したいJSONシリアライザ/デシリアライザのアクションがあるためですが、注入されたクラスを知る必要があるためです。インタフェースにどのBeanが注入されたかを知るには?

私は配線を説明し、それがゲームの実装が提供されますJavaの設定ファイルを持っています。しかしこれまでのところ、私はインターフェイスを実装する具体的なクラスを手に入れることができませんでした。私はまた、文脈から情報を要求するのに成功していない。

蟻のヒント? injectedInstance.getClass().getName()

+0

あなたがそれを得ることができれば、インタフェースの目的は失われていますか? – DNAj

+0

@DNAj私はあなたの要点を理解していますが、それ以外の場合は、私のアプリケーションで実装されるはずのインターフェースを含むPOJOを使用しているのでJSON変換(Jackson)を処理できません。確かにここには設計上の問題がありますが、実装されたクラスが分からなければ解決する方法はありません。 – jfzr

+1

こんにちは@jfzr、あなただけの反射のオプションがあります。リフレクションを適切に使用することで、アクセス修飾子を変更してアクセス可能にすることができます。これについての詳細が必要な場合はお知らせください。 – DNAj

答えて

0

この問題を回避する方法は、JSONデシリアライザにオブジェクトを注入し、getClass()メソッドをジャクソンのテンプレートとして使用して使用する方法でした。そして、それは魅力のように機能し、注入される実装が依存関係で起こっている配線に注入されたとさえ考えました。それが役に立てば幸い!

2

あなたは、注入されたインスタンスは、それが何であるか、実装クラスを教えてみましょうするためにリフレクションを使用することができます。しかし、あなたが何か特別なことをしていない限り、これをハックと考えてください。デザインを再訪して、そのようにする必要はないでしょう。

+0

実際、私はこの設計上の問題を解決している間、これが私の部分的な解決策になると思います。ありがとう! – jfzr

1

あなたは、単にインターフェースをautowireし、実装クラス名を取得することができます:それは常に便利ではありませんので、

@Autowired 
private Service service; 

System.out.println(service.getClass().getName()); 

しかし春の豆と春のコンテナは、クラス以上の場合には、それらを通常プロキシた春ですクラス:私はあなたがこのすべてを処理する必要がありジャクソンのシリアライザをご覧ください疑う

hello.HelloServiceImpl$$EnhancerBySpringCGLIB$$ad2e225d 

、参照Java - Jackson Annotations to handle no suitable constructor

関連する問題