Следующий код не вызывает StackOverflowError
ошибку, не любой здравомыслящий сообщение:Почему продублированный bean-компонент вызывает StackOverflowError, но не вызывает никаких разумных ошибок?
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
public class DuplicateBeans2 {
public static class MyClass {
}
@Configuration
public static class Config1 {
@Bean
MyClass myClass() {
return myClass();
}
}
@Configuration
public static class Config2 {
@Bean
MyClass myClass() {
return myClass();
}
}
public static void main(String[] args) {
new AnnotationConfigApplicationContext(Config1.class, Config2.class);
}
}
Почему? Разве это не плохой дизайн, чтобы не сообщать об этом явно?
UPDATE
К сожалению люди, это моя вина, я просто написал неправильно:
@Bean
MyClass myClass() {
return new MyClass();
}
Не могли бы вы еще разместить трассировку стека? – Timo
Ваши рекурсивные вызовы в 'myClass()' заполнят стек вызовов и останавливают все. Это не имеет никакого отношения к весне. Попробуйте вызвать это непосредственно из 'public static void main()' method, и вы получите тот же результат. –