Если у меня есть компонент Spring, который содержит другой не Spring-компонент, например:
@Component
class SpringBean {
private MyBean mb = new MyBean();
}
Я получаю сообщение об ошибке: не удалось подключить bean-компонент MyBean
Но если я объявлю Bean в рамках метода:
@Component
class SpringBean {
private void myMethod(){
MyBean mb = new MyBean();
}
}
Затем компонент правильно инициализируется при вызове компонента.
Так что Spring не позволяет создавать не Spring-бобы весенними бобами? Каковы причины этого?
Только бобы, созданные контейнером Spring, будут управляться весной и обеспечивать инъекцию зависимостей и все преимущества (и проблемы), которые дает Spring.
Так что Spring не позволяет создавать не Spring-бобы весенними бобами?
Весенние бобы - это POJO, поэтому их можно создать вручную, как любой класс с помощью публичного конструктора. Это означает, что вы можете:
public void foo() {
SpringBean springBeanNotManagedBySpring = new SpringBean();
//use springBeanNotManagedBySpring...
}
Но, как было сказано в начале моего ответа, springBeanNotManagedBySpring
не управляется весной, поэтому у него не будет преимуществ управляемого компонентом Spring.
Обратите внимание, что в вашем примере вы делаете две разные вещи:
MyBean
и Spring пытается его ввести, но, похоже, не находит Spring-компонент для инъекции. Вы должны опубликовать конфигурацию своего компонента, чтобы мы могли лучше анализировать это.MyBean
, где инстанцирование зависит от программиста.