Spring Стандарт Bean Инъекция против Autowiring

Насколько я понимаю, при использовании Injection Dependency все bean инициализируются при запуске.

<bean id="userPreferences" class="com.foo.UserPreferences">
  </bean>
  <!-- a singleton-scoped bean injected to the above bean -->
  <bean id="userService" class="com.foo.SimpleUserService">

      <!-- a reference to the userPreferences bean -->
      <property name="userPreferences" ref="userPreferences"/>
  </bean>

а приведенная выше конфигурация означает, что userService и userPreferences создаются при запуске приложения. Правильно ли это?

При использовании Autowiring и использовании <context:component-scan>

public class SimpleUserService{

@Autowired
UserPreferences userPreferences;

//omitted
} 

1) Создана ли функция userPreference в приложении init?

2) Какова область по умолчанию для bean, введенная autwire и как мы можем ее изменить?

3) Как влияет на создание bean и bean инъекции?

Надеюсь, я поняла.

Ответы

Ответ 1

Прежде всего, вы должны добавить @Service или @Component в класс SimpleUserService.

  • 1 Да, экземпляр UserErements ONE создается при интеграции приложений
  • 2 Область по умолчанию Singleton, вы можете изменить ее с помощью аннотации @Scope (@See Spring Ссылка: 3.11.4.4 Задание области bean)
  • 3 Компонентное сканирование и конфигурация XML работают одинаково (жизненный цикл)

Возможно, вам стоит потратить некоторое время на понимание жизненного цикла Spring. Вы должны понимать, что Spring работает немного таким образом (не на 100% правильно):

  • сначала создается пул beans
  • то он вводит свойства в beans

Но это НЕ работает так: возьмите класс, посмотрите, какие ссылки ему нужны, создавая эти ссылки (рекурсивные), а затем создавая класс.

Если вы это понимаете, тогда вы также поймете, что @Scope для bean определяется в объявлении/классе bean, но не в ссылках.

Ответ 2

1) Создана ли функция userPreference Запуск приложения?

В любом случае userPreferences инициализируется при загрузке Spring Context. Вы можете изменить это поведение, добавив lazy-init="true" в конфигурацию bean.

2) Какова область по умолчанию для beanвводится автоуведом и как мы можем изменить его?

Объем вводимого значения - это beans, загруженный в Spring. Если вы импортируете конфигурацию XML из другого проекта, она также будет включена. Я не уверен, можете ли вы ограничить область действия.

3) Как влияет на создание bean и beanинъекции?

Независимо от того, авторизован или настроен через XML, поведение должно быть одинаковым. Я предпочитаю явно определять зависимости над автоматическими аннотациями. Затем мне также нравятся сильно типизированные языки.

Ответ 3

приведенная выше конфигурация означает, что userService и userPreferences создаются при запуске приложения. Правильно ли это?

Да

Создана ли пользовательская функция в приложении init?

Да

Какова область по умолчанию для bean, введенная autwire и как мы можем ее изменить?

Область по умолчанию всегда "singleton". Это можно изменить либо с помощью @Scope с @Bean, либо с атрибутом scope XML на <bean>.

Как влияет на создание bean и bean инъекции?

Это не ясный вопрос. Если вы измените область bean, вы измените ее, когда она будет создана (начало приложения, по каждому запросу, на каждом сеансе и т.д.). Конфигурация проводки остается прежней, изменяется только жизненный цикл.

Ответ 4

@autowired notation - это устаревший способ сказать @inject. Последняя особенность JavaEE 6.

stackoverflow.com/info/7142622/what-is-the-difference-between-inject-and-autowired-in- spring -framework-которого