Почему весна.Чистый экземпляр объекта при разборе конфигурации?

#spring.net

#spring.net

Вопрос:

У меня есть SimpleObject класс

 public class SimpleObject
{
    public SimpleObject()
    {
        Console.WriteLine("Instantiated");
    }
}
  

и простая конфигурация Spring:

 <object id="simpleObject" type="SpringTest.SimpleObject, SpringTest"  />
  

Когда я анализирую конфигурацию, чтобы получить контекст, чтобы передать его на мою фабрику объектов с:

 _context = (IApplicationContext)ConfigurationManager.GetSection("spring/context");
  

Я понимаю, что мой SimpleObject экземпляр создан. Для меня это звучит как странное поведение. Это нормально? Как я могу этого избежать? Я хочу, чтобы мой объект создавался только тогда, когда я явно прошу _context его создать.

Ответ №1:

Я видел, что вы нашли конфигурацию, которая работает для вас… но вот ответ на «почему» часть вашего вопроса.

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

Вы можете переопределить это поведение по умолчанию в определении объекта, указав lazy-init="true" . Тогда синглтон будет создан, когда он впервые запрашивается в контейнере или когда он впервые необходим для создания другого объекта.

Обратите внимание, что вы также можете использовать …

 <objects default-lazy-init="true">
  <!-- no objects will be pre-instantiated... -->
</objects>
  

… чтобы разрешить отложенную инициализацию по умолчанию true для всех объектов в контейнере.

Ответ №2:

Хорошо, я глупый,

это было просто

 <object id="simpleObject" type="SpringTest.SimpleObject, SpringTest" lazy-init="true" />