Чтобы ответить на ваш вопрос с точки зрения низкого уровня:
lazy-init="true"
означает, что фасоль не будут создаваться, когда создается контекст, но будет создан, когда его называют, например, другим фасолью. Я думаю, это ясно, также из комментария @AravindA.
Скошенные бобы работают по-разному. Когда контекст создается, этот компонент переносится в дополнительный прокси-объект (по умолчанию созданный CGLIB), который передается компоненту, который ссылается на него (этот прокси по умолчанию является singleton, например, shared). Таким образом, каждый раз, когда метод вызывается в прокси-сервере во время выполнения, Spring пересекает вызов, просит фабрику вернуть экземпляр компонента и вызывает метод для этого компонента. Завод, в свою очередь, может искать «реальный» экземпляр компонента, например. в запросе HTTP (область запроса) или сеансе HTTP (область «сеанс») и/или при необходимости создать новый экземпляр. Поздняя инстанцировка позволяет инициализировать бонусный объект со значениями «времени выполнения» (объема), например. значения из HTTP-запроса/сеанса, которые, очевидно, не определены при создании контекста. В частности, «шаговые» компоненты с привязкой привязаны к потоку локально (помните, что шаги выполняются параллельно для разбиения). Таким образом, скошенные бобы разрываются, когда вы вызываете метод на них. Наконец, можно легко разбить эту изящную «идеологию весны», вызывая любой метод на предметном bean-компоненте сразу после того, как он настроен на другой компонент (например, в сеттере) :)
Спасибо @dma_k. Теперь это имеет смысл. Но когда я использовал «scope = step» на всех упомянутых компонентах, я столкнулся с этой ошибкой. ** Ошибка Msg ** - 'Невозможно преобразовать значение типа [$ Proxy5, реализующее org.springframework.aop.scope.ScopedObject, org.springframework.aop.framework.AopInfrastructureBean, org.springframework.aop.SpringProxy, org.springframework.aop .framework.Advised] до требуемого типа [XXX.XXX.MyClass]: не найдено подходящих редакторов или стратегии конверсии. «Не могли бы вы рассказать мне, почему это происходит? Разве Spring не должна возвращать компонент автоматически, когда передается фасоль? –
Я думаю, я знаю, в чем проблема: поскольку ваш bean-компонент завернут, он не соответствует запрошенному классу. Итак: либо выполняйте аутоавтоматизацию по типу, но ** используйте интерфейсы ** (интерфейсы автоматически распространяются на прокси) ('@Autowire MyInterface bean') или используют autowiring по имени (' @Resource («myBean») bean'). Если это автоустановка конструктора, которая вызвала проблему, то, по-моему, единственным вариантом является интерфейс. –
@ dma_k Вместо autowiring (с помощью Google) я добавил этот компонент и, на удивление, это сработало как шарм. '<свойство name =" proxyTargetClass "value =" true "/> '. Я больше не получаю никаких ошибок при преобразовании прокси-сервера, как указано выше. Тем не менее я не вижу, как это решает проблему. Не могли бы вы бросить какой-то свет? –