У меня есть абстрактный класс для функциональности входаАбстрактный класс Dependency Injection в Spring MVC
@Component
public abstract class SignIn {
public abstract LogInOperationToken signin(User user, HttpServletRequest request);
}
который реализуется двумя конкретными классами FacebookSignInImpl
и NormalSignInImpl
, которые оба annoted в @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 signin. Без инъекций 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
. Прошу прокомментировать, если вам нужно больше разъяснений. Благодарю.
См [профилей пружины] (http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-definition-profiles-java). – manish