spring - 使用Spring的ServiceLocatorFactoryBean

标签 spring spring-mvc

我正在使用 Oauth2 为我的 Web 应用程序创建第三方登录系统,并且必须支持各种第三方 Oauth2.0 服务提供商,例如

  1. Gmail
  2. Facebook
  3. MSN
  4. 雅虎
  5. 推特

我已经为这些提供了工作代码。每个服务提供者都有一组特定的配置,需要在启动 Oauth 过程之前创建这些配置。我正在考虑使用 Spring 的 ServiceLocatorFactoryBean 并为以下内容创建一些服务每个 Oauth 提供商都可以根据用户的选择获取该特定服务。

我的方法是否足够好,或者是否过度使用/过于复杂

编辑

根据一个答案,我们可以创建一个具有单例范围的单个 bean,并向其注入(inject)所需服务的 Map,以便我们可以根据用户选择的内容从 Map 获取服务,虽然方法很好,但不会强制我们将每个服务加载到内存中,无论我们是否使用它们,它们都会保留在内存中

最佳答案

使用ServiceLocatorFactoryBean是一种方法,它解决了基于String键查找获取bean(实现接口(interface))的问题。

javadoc说该类主要用于注入(inject)原型(prototype)作用域 bean,但也适用于其他作用域,尽管他们不建议这样做。

javadoc 给出的指示不是创建 ServiceLocatorFactoryBean 的用例,提供相同工作的另一个解决方案是仅创建一个单例 bean OAuthServiceProvider,它仅使用一些 if/根据字符串返回正确的服务其他或 map 。

从长远来看,它会更具可读性,与此相比,使用 ServiceLocatorFactoryBean 似乎并没有给我们带来太多好处。

关于spring - 使用Spring的ServiceLocatorFactoryBean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20923587/

相关文章:

java - Hibernate with Postgresql 未正确加载数据类型为 'text' 的列的数据

java - JPA实体在异常后没有被持久化

java - Spring(@SpyBean)与 Mockito(@Spy)

java - Spring Boot Controller 应如何处理 'missing' 请求 header ?

java - @SpringBootTest 创建名为 'requestMappingHandlerAdapter' 的 bean 时出错

java - 从 4.2.0.RC3 升级到 4.2.0.RELEASE 时出现 Spring Async 问题

java - Spring安全/授权级别

html - spring mvc资源无法访问或不工作

java - 在 Spring 3 MVC 中验证@RequestParam

mysql - 将下拉列表中所选项目的值传递给 spring mvc hibernate 注释中的 Controller