我正在使用 Oauth2 为我的 Web 应用程序创建第三方登录系统,并且必须支持各种第三方 Oauth2.0 服务提供商,例如
- Gmail
- MSN
- 雅虎
- 推特
我已经为这些提供了工作代码。每个服务提供者都有一组特定的配置,需要在启动 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/