【发布时间】:2017-02-21 05:12:20
【问题描述】:
我有一个用于登录功能的抽象类
@Component
public abstract class SignIn {
public abstract LogInOperationToken signin(User user, HttpServletRequest request);
}
它由两个具体的类FacebookSignInImpl 和NormalSignInImpl 实现,它们也都被注释为@Component。
现在,我有一个服务类如下:
@Service
public class SignInService {
@Autowired(required = true)
private SignIn signIn;
public SignInService(@Qualifier("signIn") SignIn signin) {
this.signIn = signin;
}
public LogInOperationToken signin(User user, HttpServletRequest request) {
return signIn.signin(user,request);
}
}
如您所见,它将抽象类作为构造函数参数。
我试图从控制器类中检查一些标志,并在此基础上为抽象类分配正确的实现:普通或 facebook 登录。如果没有 Spring 依赖注入,我会执行以下操作:
SignIn signIn = null;
if(flag.equals("facebook")){
signIn = new FacebookSignInImpl();
}
else{
signIn = new NormalSignInImpl();
}
SignInService signInService = new SignInService(signIn);
signInService.signIn(user, request);
既然SignIn 是抽象类,我怎么能@Autowire 将它分配给SignInService 中的构造函数。如果您需要更多说明,请发表评论。谢谢。
【问题讨论】:
标签: spring spring-mvc dependency-injection abstract-class autowired