使用参数的构造函数注入

Constructor Injection using Parameter

我有以下带有参数化构造函数的 bean:

@Component
public class AuthHelper{
    @Autowired
    private AuthClient gmailClient;
    @Autowired
    private AuthClient yahooClient;

    private AuthClient client;

    public AuthHelper client(String option) {
        if(option.equals("gmail")) this.client=gmailClient;
        if(option.equals("yahoo")) this.client=yahooClient;
        return this;
    }

    public boolean authLogic(String uid, String pass) {
        return client.authorize(uid,pass);
    }

}

你能帮忙自动装配上面的bean吗:

我在下面的服务中调用上面的 bean 时卡住了,

@Service
public class AuthService{
    @Autowired
    public AuthHelper authHelper;

    public boolean authenticate(String uid, String pass){
        return authHelper.client("gmail").authLogic(uid, pass);
    }

}

请建议...我希望助手 class 应该使用基于我从服务传递的参数的 bean。

修改后: 上面的例子工作正常。如果这个实现有什么问题请提出...

IMO,更好的方法是拥有一个 AuthHelperFactory,它应该根据输入为 AuthHelper bean 提供适当的客户端。

public class AuthHelper{

private AuthClient client;

public AuthHelper (AuthClient client) {
    this.client = client;
}

public boolean authLogic(String uid, String pass) {
    return this.client.authorize(uid,pass);
}

}

@Component
public class AuthHelperFactory {
  @Autowired
  private AuthClient gmailClient;
  @Autowired
  private AuthClient yahooClient;

  public AuthHelper getAuthHelper(String option) {
     if(option.equals("gmail")){
        return new AuthHelper(gmailClient);
     } else if (option.equals("yahoo")){
        return new AuthHelper(yahooClient); 
     }
  }
 }

在AuthService中,需要在authenticate方法中调用工厂方法

return authHelperFactory.getAuthHelper("gmail").authLogic(uid, pass);