2013-02-12 2 views
0

Поскольку инъекции зависимостей предполагает инверсию контроля, я не могу увидеть МОК в следующем вызове:Является ли вызов ApplicationContext.getBean() весной, используя инъекцию зависимостей?

Car car = (Car)ApplicationContext.getBean("car"); 

Это не пружинные выработать себе класс, потому что я написал автомобиль себя в код.

Кроме того, все книги говорят о двух типах DI: сеттера и конструктора DI.

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

ответ

1

Нет. Получение вашего бина таким образом не является инъекцией зависимости. Он не вводится. Поля этого компонента, вероятно, будут введены.

Иногда этого не происходит, но в целом старайтесь избегать этого.

0

Это не весна, чтобы выработать себя в классе, потому что я сам написал автомобиль в код.

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

0

getBean использует ту же конфигурацию (applicationContext), что и инъекция Spring, но ваш пример не использует никакой инъекции зависимости. (Ну, Car bean может быть введен с его зависимостями, поэтому мы действительно не знаем из вашего примера).

Но обычно инъекция зависимости означает, что вы не выполняете никаких программных настроек (Автомобиль = что-то) самостоятельно. Контейнер Spring создаст для вас экземпляр car и либо с помощью установщиков car, либо с его конструктором, будет вводить зависимости, которые должен работать x.

0

Я не знаю, почему вы пытаетесь получить ссылку на автомобиль таким образом ... Если вы хотите использовать ссылку Car в другом классе, вы можете просто использовать установку или конструкторную инъекцию, как вы сказали. Если вы используете его, как описано выше, я не вижу ни одного типа DI. Одна вещь, которую мы можем с уверенностью сказать, заключается в том, что bean управляется контейнером IOC, когда вы пытаетесь получить ссылку из контекста приложения. ..

Смежные вопросы