使用参数的构造函数注入
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);
我有以下带有参数化构造函数的 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);