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编织来实现它。 –