我有一个带有注释驱动配置的 spring webapp。
所有控制器、存储库都是自动装配的。
在集成 Spring Security 时,我定义了一个单独的 security-app.xml。我创建了一个名为 LoginUserService 的服务,它实现了 UserDetailsService。现在调用这个类的 loadUserByUsername() 方法进行身份验证。
此类具有对 UserRepository 的自动装配依赖项。现在这个自动装配的依赖项变成了空值。为了解决这个问题,我启用注释驱动配置并在组件扫描配置中添加存储库类的包名称。
此处还讨论了此解决方案 spring security with custom user details
但现在的问题是 UserRepository 有一个带有 @PersistenceContext 注释的 EntityManager 字段。对于 spring 安全配置,它能够定位 UserRepository 但无法定位实体管理器。我应该在这里创建一个新的 EntityManagerFactory 吗?我猜这会在我的应用程序中创建两个持久性单元?
如何将自动装配的依赖项注入使用原始 servlet xml 创建的 UserRepository?
更新
这在这里简要讨论: https ://stackoverflow.com/a/7078395/161628
但我想一个规范的详细答案对我来说会更有用。
更新
在运行时使用 ApplicationContext 获取 UserRepository 怎么样?
if (userRepository == null) {
userRepository = ApplicationContextProvider.getApplicatonContext().getBean(UserRepository.class);
}