2015-06-12 2 views
4

Я пытаюсь перенести приложение, написанное с помощью CURAM, в проект Struts2. Мы используем Spring, чтобы воспользоваться возможностями транзакций базы данных. Сделайте так, чтобы код приложения был написан в приложении CURAM, я не могу использовать функцию «Впрыскивание зависимостей» Spring. Мне нужно иметь доступ к Spring ApplicationContext из любой точки моей бизнес-логики. И создавая новый экземпляр ApplicationContext всякий раз, когда мне это нужно, он размалывает все до паузы.Static Singleton Instance of Spring's ApplicationContext

Я нашел этот ресурс в Интернете, который показывает вам, как создать статический одноэлементный экземпляр SpringContext Spring.

Access the Spring-ApplicationContext from everywhere in your Application

Это позволит решить мою проблему, но у меня есть проблемы. Не будет ли статический одноэлементный экземпляр означать, что каждый пользователь, вызывающий действие Struts2, будет получать бизнес-объекты из одного экземпляра ApplicationContext?

По умолчанию весенние бобы являются одноточечными в экземпляре ApplicationContext. Из-за этого я думаю, что статический одноэлементный экземпляр ApplicationContext приведет к тому, что все объекты-пользователи будут использовать один и тот же экземпляр всех бизнес-объектов, что может испортить транзакции и, вероятно, вызвать блокировки повсюду. Правильно ли я предполагаю это?

Что делать, если я объявляю все мои весенние бобы прототипом? Позволит ли я использовать возможности Springs Database Transaction/Concurrency Handling при использовании статического одиночного экземпляра ApplicationContext?

Спасибо.

+0

операции управляются через нить местных жителей. Весна уже выяснила это. Тем не менее, я предлагаю вам выполнить несколько проверок согласованности нескольких потоков, используя, например,jmeter, чтобы все было в порядке, учитывая некоторые из низкоуровневых вещей, которые вы копаете. – Taylor

ответ

3

Не будет ли статический одноэлементный экземпляр означать, что каждый пользователь, вызывающий действие Struts2, будет получать бизнес-объекты из одного экземпляра ApplicationContext?

да

Я имею в виду, что статический синглтон экземпляр ApplicationContext вызовет тот же экземпляр всех бизнес-объектов, которые будут использоваться всеми пользователями/сделки

да

который разрушит транзакции и, вероятно, вызовет блокировки повсюду.

no. Зачем это разрушать транзакции? Зачем нужны замки? Бизнес-сервис типично полностью без гражданства и, таким образом, отлично подходит как одноэлементный. Типичное приложение Spring имеет только один контекст приложения, содержащий одноэлементные компоненты. Вот так оно и работает. Контекст транзакции не сохраняется в бизнес-объектах. Он хранится в ThreadLocal.

+0

Спасибо за ваш ответ. Означает ли это, что нормально использовать статический одноэлементный экземпляр ApplicationContext Spring для приложения? –

+0

Да, это нормально. –

0

если вы создаете класс без общих переменных, используя siglton, это будет лучший выбор. Вы можете @Autowired необходимо Сlass любит Dao или услуги класса

если ваш класс будет прототип, и вы получите боба от ApplicationContext каждый раз, когда это будет новый объект

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