создание объекта весной - PullRequest
2 голосов
/ 16 марта 2011

Если я использую пружинную раму в моем приложении, делает ли создание объекта, подобного этому Test test = new Test() , плохой способ создания экземпляра? Должен ли я всегда использовать конфигурацию bean-компонента для получения нужных мне объектов / bean-компонента? Если да, значит ли это, что у меня должно быть все определение объекта / компонента в весеннем файле applicationContext xml?

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

Если вы хотите, чтобы Spring управлял вашим объектом (это означает, что зависимости вводятся, среди прочего), вы должны использовать ApplicationContext.

Вызов Test test = new Test() не является незаконным или даже плохой практикой.Это просто означает, что Spring не будет осведомлен об этом объекте, и он не будет беспокоить автоматическое связывание его зависимостей или выполнение чего-либо еще, чего вы ожидаете от Spring.

Вам не обязательно использоватьфайл applicationContext.xml для ВСЕХ объявлений вашего компонента.Многие люди предпочитают аннотации, которые позволяют объявлять bean-компоненты вне файла applicationContext.xml.

Ничего не стоит, что bean-компоненты, управляемые Spring, по умолчанию являются одиночными (например, сервлетами).Если вы хотите, чтобы бины с состоянием были осведомлены о Spring, вы можете использовать ObjectFactoryCreatingFactoryBean, чтобы сделать что-то вроде этого:

@Autowired 
private ObjectFactory myWidgetFactory;

public void doStuff() {
   Widget w = myWidgetFactory.getObject();
}

Подробнее об этом поведении можно прочитать здесь:

http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/beans/factory/config/ObjectFactoryCreatingFactoryBean.html

1 голос
/ 16 марта 2011

Для меня есть большая разница между объектами, которые представляют компоненты моего приложения - сервисы, контроллеры, DAO, утилиты и т. Д. - и объектами, которые представляют объекты в моем приложении - Person, Order, Invoice, Account и т.д. Первый тип объектов должен абсолютно управляться Spring и вводиться. Последний тип обычно создается на лету приложением, и это часто включает вызов new. Это не проблема.

0 голосов
/ 16 марта 2011

Тестовый тест = новый Тест () плохой способ создать экземпляр?

Да, это плохая практика.

Должен ли я всегда использовать конфиг бина получить нужные мне объекты / бин?

Да, если вы используете Spring для внедрения зависимостей.

Если да, значит ли это, что я должен иметь все определение объекта / компонента в Spring ApplicationContext XML-файл?

Всегда! Вы также можете использовать аннотации.

...