2014-11-25 3 views
0

Я новичок в Spring.Новый весной: загрузка контекста приложения

До сих пор в моем приложении каждый раз, когда мне нужно было использовать компонент, я загружаю XML.

ApplicationContext context = новый ClassPathXmlApplicationContext ("applicationContext.xml");

Итак, в каждом классе, где мне нужно загрузить конкретный компонент, я использую указанную выше строку.

С точки зрения эффективности или правильного использования, я хотел бы знать, является ли это правильное использование (я подозреваю, что это не так) или если контекст должен передаваться как параметр каждый раз, когда ему нужен один класс.

Благодаря

+0

Очевидно, что это не так. Если вы не хотите сталкиваться с проблемами производительности, проблемами с памятью, странными транзакционными проблемами и т. Д. Вы только должны ее построить один раз, если вам нужны beans для использования зависимой инъекции ... –

+0

Если у вас нет конкретной причины использовать конфигурацию XML для Spring, я предложит вам попробовать получить представление о том, как выглядит приложение Spring, следуя руководству по началу работы: http://projects.spring.io/spring-framework/#quick-start – mrlem

ответ

0

Я предполагаю, что вы используете Spring в не веб-приложения.

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

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

Одной из многих проблем, которые могут возникнуть с вашей текущей настройкой, является проблема с областью определения компонентов. У Spring есть одноэлементные бобы, но это одиночные игры только в одном контексте приложения. Поэтому, если вы извлекаете bean-компонент из двух разных контекстов приложения, они не будут тем же самым экземпляром. Другие проблемы будут связаны с производительностью, поскольку создание контекста приложения будет дорогостоящим.

0

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

Вкратце, никогда не звоните new самостоятельно. Вместо этого попросите Spring для боба. Если у компонента есть зависимости, используйте инъекцию конструктора.

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

Вы также должны прочитать статьи о Java-based container configuration.

Статьи по теме:

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