ファサードオブジェクトservice
で表されるモデルとJSPベースのビューで構成される小さなSpringアプリケーションを作成しています。その間に、通常のSpringコントローラと、文字列IDをモデルからオブジェクトに変換するコンバータがあります。Springコンバーターの自動オブジェクトにアクセスできない
このコンバータでは、サービスオブジェクト(@Autowired
)を使用して、service
から正しいモデルオブジェクトを検索します。問題は、コンバーターがservice
のメソッドにアクセスするたびに何も起きないことです。エラーや例外はなく、そのまま継続してnullを返します。
service
が正しく初期化されているかどうかを確認していますが、それは問題ではないようです。デバッグ中に私はプログラムがThreadPoolExecutor
を通過し、service
でメソッドを実行しようとするたびにそこに停止することに気づいた。これは、問題がロックされている間にservice
にアクセスすることに関連していると仮定します。
私はすでに同期ブロックに必要なコードを配置しようとしましたが、それは役に立ちません。 Springコンバーターの@Autowired
オブジェクトのメソッドにアクセスできない理由を教えてもらえますか?ここで
は、それは価値がある何のためのコンバータクラスです:
public class IdToPublisherConverter implements Converter<String, Publisher>{
@Autowired
private MainService service;
@Override
public Publisher convert(String id) {
return service.getPublisher(Long.getLong(id));
}
}
EDIT:
MainService
を取得するためのインタフェースを提供ファサードオブジェクトで、追加、更新、および私のモデルデータを削除する(Game
オブジェクトPublisher
オブジェクト)
service.getPublisher(id)
は、service
からPublisher
オブジェクトを取得します。これは、コンバーターがJSPページから受信したlong型のIDに基づいています。この方法は、MainService
で、次の方法に行く:
@Override
public Publisher getPublisher(long id) {
Publisher publisher = repository.readPublisher(id);
return publisher;
}
に行くどの:あなたのサービスが
@Service("mainService")
public class MainService...
とその中に例えば@Service注釈を、持っている場合
private final Map<Long, Publisher> publishers;
...
@Override
public Publisher readPublisher(long id) {
return publishers.get(id);
}
「MainService」とは何ですか? 'getPublisher'は何をしますか? [MCVE]を入力してください。 – Savior
あなたはすでに 'service'が初期化されているので(autowiringが働いている)、' service'で参照されるオブジェクトがロックされていることを確認しました。だから、なぜロックされたのかを伝えるために 'service.getPublisher(...)'が何をしているのか(コードではなくコード)を参照する必要があります。 – Thomas
あなたのリポジトリの '空ではない? – home