У меня следующий класс @Configuration
, в котором я объявляю @Bean, который зависит от списка @Autowired
бинов. Однако этот список неполон, когда я к нему обращаюсь. Все @Bean
определения были выполнены, кроме одного, определенного в том же классе.
@Configuration
public class MyConfig {
@Autowired
List<RequiredBean> requiredBeans;
@Bean(name="ProblemHere")
public CustomObject customObject() {
log.info(requiredBeans.size()); // 1 (debugging, I can see is the one defined in "AnotherConfigClass")
}
@Bean(name="reqBeanInsideClass")
public RequiredBean reqBean() {
// this method does not get executed
return new RequiredBean();
}
}
Наличие других классов, таких как;
@Configuration
public class AnotherConfigClass {
@Bean(name="ThisOneGetsExecuted")
public RequiredBean reqBean() {
// this gets executed, and therefore, added to the list
return new RequiredBean();
}
}
Возможно, самым простым решением было бы добавить @DependsOn ("reqBeanInsideClass").
Однако:
- Интересно, почему это работает для всех
@Bean
, определенных в разных классах, но не в этом.
- Я не совсем уверен, что это именно так, и, боюсь, позже, другой
@Bean
не будет выполнен
Полагаю, правильный подход должен выглядеть примерно так:
@DependsOn(List<RequiredBean>) // Obviously this does not work
Как мне решить эту проблему?
Обновление
Я дважды скопировал один и тот же класс, чтобы увидеть, что произойдет, поэтому теперь у меня также есть:
@Configuration
public class MyConfig2 {
@Autowired
List<RequiredBean> requiredBeans;
@Bean(name="ProblemHere2")
public CustomObject customObject() {
log.info(requiredBeans.size());
}
@Bean(name="reqBeanInsideClass2")
public RequiredBean reqBean() {
// this method does not get executed
return new RequiredBean();
}
}
Удивительно, но при этом оба метода @Beans
(ProblemHere
& ProblemHere2
) вызываются до обоих методов reqBeanInsideClass
и reqBeanInsideClass2
.
По какой-то причине я думаю, что Springboot может распознавать @Beans
, необходимые для класса, если они определены в другом классе.
- Звучит ли это кому-нибудь логично?