アノテーション駆動型の構成を持つ春の webapp があります。
すべてのコントローラ、リポジトリは自動配線されています。
Spring Security を統合するとき、別の security-app.xml を定義しました。UserDetailsService を実装する LoginUserService という Service を作成しました。これで、このクラスのメソッド loadUserByUsername() メソッドが認証のために呼び出されます。
このクラスには、UserRepository に対する自動配線された依存関係があります。この自動配線された依存関係は null であることが判明しました。これを修正するために、アノテーション駆動構成を有効にし、コンポーネント スキャン構成にリポジトリ クラスのパッケージ名を追加します。
このソリューションは、ここでも説明されています 。カスタム ユーザーの詳細を使用した春のセキュリティ
しかし、問題は、UserRepository に @PersistenceContext アノテーションが付けられた EntityManager フィールドがあることです。春のセキュリティ構成では、UserRepository を見つけることはできますが、エンティティ マネージャーを見つけることはできません。ここで新しい EntityManagerFactory を作成する必要がありますか? 私のアプリケーションに 2 つの永続化ユニットが作成されると思いますか?
元のサーブレット xml で作成された UserRepository に自動配線された依存関係を挿入するにはどうすればよいですか?
アップデート
これについては、ここで簡単に説明します: https://stackoverflow.com/a/7078395/161628
しかし、標準的な詳細な回答が私にとってより役立つと思います。
アップデート
実行時に ApplicationContext を使用して UserRepository を取得するのはどうですか?
if (userRepository == null) {
userRepository = ApplicationContextProvider.getApplicatonContext().getBean(UserRepository.class);
}