Раскрытие информации: я участвую в проекте Model-Glue, поэтому я вероятно знаю, о чем говорю: -)
CFML не имеет истинного уровня классаэкземпляры, как Java.Если вы хотите синглтоны (один экземпляр, совместно используемый многими частями приложения), вам нужно либо поместить его в общую область (yuk!), Либо использовать бобовый контейнер.К счастью, Model-Glue тесно интегрирован с ColdSpring (популярным контейнером компонентов для CFML), а Model-Glue 3 упрощает использование компонентов ColdSpring в ваших контроллерах.
Во-первых, отредактируйте файл ColdSpring.xml навключите определения для ваших синглетонов:
<bean id="ClientRepo" class="MyApp.model.client.ClientRepo"/>
<bean id="OrderRepo" class="MyApp.model.order.OrderRepo"/>
Это всего лишь простой пример, конечно.ColdSpring - это мощная среда внедрения зависимостей, основанная на Java Spring.Проверьте ColdSpring Quickstart для некоторых других вещей, которые вы можете сделать с ним.
После того, как бины определены в ColdSpring, вы можете попросить ваш контроллер явно запрашивать их через getModelGlue ().getBean () вызывает.Однако лучший способ - объявить зависимость вашего контроллера от этих компонентов и позволить Model-Glue внедрить их в ваш контроллер для вас.Зависимость может быть объявлена либо в ModelGlue.xml, либо в CFC вашего контроллера.Вот как объявлять зависимости bean-компонентов в вашем контроллере:
component ClientController beans="ClientRepo,OrderRepo"
{
public void function HomePage(any event)
{
var clientId = event.getValue("id");
var client = beans.ClientRepo.getClientById(clientId);
var orders = beans.OrderRepo.getOrdersForClientId(clientId);
// put the variables into the event object for the view to access
}
}
Любые объявленные bean-компоненты внедряются в область действия bean-компонентов контроллера, поэтому они готовы к использованию любыми функциями слушателя.Однако обратите внимание, что внедрение bean-компонента происходит после инициализации , поэтому вы не можете использовать их как функцию init ().
Bean-компоненты ColdSpring по умолчанию являются синглетонами, поэтому, если один и тот же компонент ColdSpring внедряется в несколько контроллероввсе они получат один и тот же экземпляр компонента.Если вы добавите singleton = "false" в определение bean-компонента, то каждый контроллер получит свой экземпляр;Хотя я не могу понять, почему вы захотите сделать это.
Для получения дополнительной информации о введении бобов в Model-Glue, посмотрите Bean Injection HOWTO на Model-Glue Wiki .
Model-Glue 3.1 создает все свои контроллеры во время инициализации фреймворка как одиночные, поэтому каждый контроллер создается один раз для каждого приложения.Будущие версии могут отложить создание экземпляров контроллеров до тех пор, пока они не потребуются, поэтому лучше не делать предположений относительно того, когда они инициализируются.Если вам действительно нужно, чтобы какой-то код в контроллере выполнялся во время инициализации приложения, я предлагаю вам добавить к нему прослушиватель onApplicationStart.