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-которого