0
//我的工廠類春@Autowired註釋對象值爲null
@Component
public class UserRewardAccountValidatorFactory {
@Autowired
private VirginAmericaValidator virginAmericaValidator;
private static class SingletonHolder {
static UserRewardAccountValidatorFactory instance = new UserRewardAccountValidatorFactory();
}
public static UserRewardAccountValidatorFactory getInstance() {
return SingletonHolder.instance;
}
private UserRewardAccountValidatorFactory() {}
public PartnerValidator getPartnerValidator(Partner partner){
return virginAmericaValidator;
}
}
//我Validator類
@Service
public class VirginAmericaValidator implements PartnerValidator {
@Override
public void validate(String code) throws InvalidCodeException{
//do some processing if processing fails throw exception
if (code.equals("bad".toString())){
throw new InvalidCodeException();
}
}
}
//用法:
PartnerValidator pv = UserRewardAccountValidatorFactory.getInstance().getPartnerValidator(partner);
if (pv != null){
try {
pv.validate(userRewardAccount);
} catch (InvalidCodeException e){
return buildResponse(ResponseStatus.INVALID_USER_REWARD_ACCOUNT, e.getMessage());
}
}
我的包掃描級別是在更高的水平。發生什麼事是我的維珍美國驗證員總是空着的。爲什麼@Autowired註釋不起作用。
或c)使用@Configurable和AspectJ,那麼Spring即使在由'new'創建的實例注入(我提到這一點,只爲完成,並且因爲反對這一傳聞打擊這種Spring不能注入由'new'生成的類 - 因爲它是錯誤的) – Ralph
如果我讓VirginAmericaValidator從另一個抽象類擴展並在那裏實現接口,是否會爲我製作spring autowire? – riship89
不,這也不會工作,因爲問題仍然以創建UserRewardAccountValidatorFactory的方式進行,而不是在驗證程序中。您應該能夠使用我提到的兩個選項之一來工作。拉爾夫提到的方法也很棒,但它需要完整的AspectJ編織來實現它。 –