问题:ServiceImpl bean中注入的是那个AES?
@Bean("primary")
@Primary
public AES getAes() {
AES aes = new AES(Mode.CBC, Padding.PKCS5Padding, "SecretKey".getBytes(), "iv".getBytes());
return aes;
}
@Bean("ZRAes")
public AES getZRAes(){
AES aes = new AES(
Mode.CBC,
Padding.PKCS5Padding,
Objects.requireNonNull(environment.getProperty(SECRET_KEY)).getBytes(),
Objects.requireNonNull(environment.getProperty(IV)).getBytes());
return aes;
public abstract class AbstractService {
protected AES aes;
protected Environment environment;
protected RestTemplate restTemplate;
public AbstractPreOrderService(AES aes, Environment environment, RestTemplate restTemplate) {
this.aes = aes;
this.environment = environment;
this.restTemplate = restTemplate;
}
}
@Service(value = "zhongrui")
public class ServiceImpl extends AbstractService {
@Autowired
@Qualifier("ZRAes")
private AES aes;
@Autowired
Environment environment;
public ServiceImpl(AES aes, Environment environment, RestTemplate restTemplate) {
super(aes,environment, restTemplate);
}
解:注入的是primary这个AES
获取到了三个bean
so,获取的带有@Primary注解的bean去给构造器的值进行赋值,所以就导致无法使用到自己注入的指定名称的bean,因调用构造器时,还没有开始注入,所以后面值一直都是@Primary注解的bean
解决方案:指定一下就好了
因为: