【发布时间】:2017-09-02 15:40:52
【问题描述】:
可能是重复的,请随意标记...我是 Spring 的新手。
我正在实现一个 UserService 来获取来自不同供应商的用户详细信息, 所以我的班级结构是
接口用户服务->>用户服务A,用户服务B
使用哪个用户服务取决于一个名为 provider 的字段。我的代码看起来像
public interface ExternalUserService {
ExternalUserDTO getUserDetail(String username);
}
实现 -
public class GoogleUserService implements ExternalUserService{
@Override
public ExternalUserDTO getUserDetail(String username) {
return user;
}
}
public class FacebookUserService implements ExternalUserService{
@Override
public ExternalUserDTO getUserDetail(String username) {
return user;
}
}
我想以这种方式在我的代码中使用它,我不知道这是否可能,但尝试看看是否可能
public class ExternalUserManager(String provider) {
String provider;
@Autowired
ExternalUserService service; //This is supposed to come from some factory, dont know how to get it in spring context.
public void doSomething(String username) {
System.out.println(service.getUserDetail(username));
}
}
Had it been in conventional java programming, I would have created a Factory called UserServiceFactory, which would have made the things straight.
Can someone please help me on how much it is possible with spring, and if its possible, then how can I achieve it? We use Spring boot, so no xml config.
【问题讨论】:
-
是否可以同时存在 GoogleUserService 和 FacebookUserService?
-
是的.. 它们应该在同一个应用程序实例中使用。就像一个用户可以将他的两个个人资料都链接到他的帐户一样。
-
为什么不自动装配它们呢?
-
我将自动装配它们,但我没有得到的是如何根据提供者获取适当的 bean?
-
我有点困惑。 ExternalUserManager 是 Spring 组件(单例 Bean)。所以设置一个字段提供者意味着每个人都有相同的提供者。那:公共类 ExternalUserManager(String provider) 在 Java 中也是不可能的。
标签: spring-boot