Во-первых, вам нужно включить переопределение bean-компонентов с помощью;
spring.main.allow-bean-definition-overriding=true
и просто иметь свой собственный bean-компонент с точным именем в качестве @Service
аннотированного класса;
@Bean(name = "dependency")
public Dependency getDependent() {
return new Dependency("xyz", "abc");
}
Таким образом, вы можете переопределить аннотированный @Service
Dependency
с помощью вашего инициализированного бина. Но для этого вам сначала нужно запретить свой пользовательский getDependent()
результирующий bean-компонент запускать аннотации @Value
, для этого вам нужно изменить метод инжекции Dependency
class @Value
на конструктор. Когда это так, только когда Spring автоматически внедряет, аннотации @Value
сработают, когда вы вручную вызовете new Dependency("xyz", "abc")
, они не будут.
@Service
public class Dependency {
private String xyz;
private String abc;
@Autowired
public Dependency(@Value("${xyz.value}") String xyz, @Value("${abc.value}") String abc) {
this.xyz = xyz;
this.abc = abc;
}
}
С этими изменениями вы получитенет ошибки с вашим пользовательским компонентом bean autowired.