2015-04-03 3 views
0

, приложение я работаю имеет одну услугу, на которую ссылается, как это:Рефакторинг служба инъекции/конкретизация в приложении Grails

private def widgetServ = new WidgetService() 

в другой службе. Методы призваны widgetServ так:

def aVar = widgetServ.SomeMethod() 

Внутри widgetServ соединения SQL создается с помощью этого:

def sql = Sql.newInstance(... 

Вот некоторые вопросы, которые стоят перед нами:

Поскольку мы используем «новый» мы не могут иметь неявных транзакций, используя static transactional = true, согласно документам Grails. При попытке обновить Grails с 1.3.7 до 2.4.4 мы заметили, что создание переменной sql выше ошибки выдается из-за того, что система не может найти драйвер jdbc. Мы не хотим использовать новые и вместо этого вводим WidgetService.

Вопрос в том, что кто-нибудь столкнулся с этим и может ли вы опубликовать любые подводные камни?

Другая услуга в системе имеет схожие проблемы, но хуже, поскольку она используется как POGO и имеет экземпляр 140+, где он создан новым. Кроме того, некоторые контроллеры вводят его и создают новые. Какой подход следует использовать при удалении всех «новых» творений службы? У системы возникают проблемы с устаревшими ссылками и отсутствием данных, которые могут быть вызваны отсутствием управления транзакциями в этих службах.

+0

Примечание: вторая служба, на которую я ссылаюсь, имеет несколько конструкторов. – Thanks4Playing

ответ

1

Вы определенно не должны использовать «новый» здесь, потому что объекты, созданные таким образом, совершенно не осознают контекст Spring, поэтому они ничего не знают о configs, datasource и т. Д. Вопрос в том, почему вы это сделали что? и есть ли какая-то причина, почему нет регулярной инъекции зависимостей? Это не было бы очень больно, это просто нужно было бы изменить все

private def widgetServ = new WidgetService() 

к

private WidgetService widgetServ 

и, возможно, реорганизовать это имена полей widgetService (легко сделать в IDE)

+0

Спасибо за совет. Я вхожу в новый проект и нашел это так. Теперь задача - исправить это. Большая работа - это еще одна услуга, с которой я ссылаюсь, что у нее несколько конструкторов, и она создала «новое» 140 раз в приложении. – Thanks4Playing

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