Если Spring управляет одним bean-компонентом, означает ли это, что все созданные bean-компоненты также должны управляться

1

Если у меня есть компонент 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-бобы весенними бобами? Каковы причины этого?

  • 1
    Я почти на 100% уверен, что код, который вы показываете, не соответствует описанному вами поведению.
  • 0
    Нет, вы должны быть в состоянии использовать его, как в первом. Там должно быть что-то еще, что вам не хватает. Опубликуйте трассировку стека исключений, и тогда мы сможем помочь
Теги:
spring

1 ответ

2
Лучший ответ

Только бобы, созданные контейнером Spring, будут управляться весной и обеспечивать инъекцию зависимостей и все преимущества (и проблемы), которые дает Spring.

Так что Spring не позволяет создавать не Spring-бобы весенними бобами?

Весенние бобы - это POJO, поэтому их можно создать вручную, как любой класс с помощью публичного конструктора. Это означает, что вы можете:

public void foo() {
    SpringBean springBeanNotManagedBySpring = new SpringBean();
   //use springBeanNotManagedBySpring...
}

Но, как было сказано в начале моего ответа, springBeanNotManagedBySpring не управляется весной, поэтому у него не будет преимуществ управляемого компонентом Spring.

Обратите внимание, что в вашем примере вы делаете две разные вещи:

  • В первом коде у вас есть поле в классе типа MyBean и Spring пытается его ввести, но, похоже, не находит Spring-компонент для инъекции. Вы должны опубликовать конфигурацию своего компонента, чтобы мы могли лучше анализировать это.
  • Во втором коде вы создаете локальную переменную (полностью отличную от поля в классе) типа MyBean, где инстанцирование зависит от программиста.
  • 1
    OP, различие, которое вы должны начать делать, состоит в том, что экземпляр, жизненным циклом которого управляет Spring, называется bean-компонентом. Экземпляр, который не является просто экземпляром.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню