Мне еще предстоит найти высокоуровневое определение бобов Spring, которое я могу понять. Я часто на них ссылаюсь в документации и книгах Grails, но думаю, что понимание того, чем они являются, было бы полезно. Так, каковы Весенние бобы? Как их можно использовать? Они имеют какое-то отношение к инъекции зависимости?
398
Ответы:
Чтобы узнать больше о bean-компонентах и области применения SpringSource :
* IoC: инверсия контроля
источник
@Autowired
? Или просто, когда я делаю своюimport
с?Spring bean - это просто объекты экземпляров, которые управляются контейнером Spring, а именно, они создаются и подключаются платформой и помещаются в «мешок объектов» (контейнер), откуда вы можете получить их позже.
Часть «разводка» - это то, что представляет собой внедрение зависимостей, это означает, что вы можете просто сказать «мне понадобится эта вещь», и фреймворк будет следовать некоторым правилам, чтобы получить правильный экземпляр.
Для тех, кто не привык к Spring, я думаю, что статья Wikipedia Spring имеет хорошее описание :
источник
Сначала давайте поймем весну:
Пружина представляет собой легкий и гибкий каркас.
Аналогия:
Bean: объект, который создается, управляется и уничтожается в Spring Container. Мы можем внедрить объект в контейнер Spring через метаданные (либо xml, либо аннотации), которые называются инверсией управления.
Аналогия. Предположим, что у фермера есть сельскохозяйственные угодья, обрабатываемые семенами (или бобами). Здесь Фермер - это Spring Framework, Сельскохозяйственные угодья - это Spring Container, Beans - это Spring Beans, Cultivating - это Spring Processors.
Как и жизненный цикл бобов, у бобов весной тоже есть свой жизненный цикл.
img source
Ниже приведена последовательность жизненного цикла бина в Spring:
Создание экземпляра: сначала контейнер весны находит определение bean-компонента из файла XML и создает экземпляр bean-компонента.
Заполнение свойств: используя внедрение зависимостей, Spring заполняет все свойства, указанные в определении компонента.
Задать имя компонента: если компонент реализует
BeanNameAware
интерфейс, Spring передает идентификатор компонента вsetBeanName()
метод.Установить Bean factory: если Bean реализует
BeanFactoryAware
интерфейс, Spring передает beanfactory вsetBeanFactory()
методу.Предварительная инициализация: также называется постобработкой бина. Если с bean-компонентом связаны какие-либо BeanPostProcessors, Spring вызывает
postProcesserBeforeInitialization()
метод.Инициализация бинов: если бин реализует
IntializingBean
, егоafterPropertySet()
вызывается метод. Если бин имеет объявление метода init, вызывается указанный метод инициализации.Постинициализация: - Если есть какие-либо,
BeanPostProcessors
связанные с бином, ихpostProcessAfterInitialization()
будут вызваны методы.Готов к использованию: теперь компонент готов к использованию приложением
Destroy: если бин реализует
DisposableBean
, он вызоветdestroy()
методисточник
Ну, вы поняли это частично. Вы должны адаптировать компоненты в соответствии с вашими потребностями и сообщить контейнеру Spring, чтобы управлять им при необходимости, используя методологию, известную как IoC ( Inversion of Control ), придуманную Мартином Фаулером , также известную как инъекция зависимости (DI).
Вы связываете bean-компоненты таким образом, что вам не нужно заботиться о создании экземпляров или оценивать какую-либо зависимость от bean-компонента. Это широко известно как принцип Голливуда .
Google - лучший инструмент, чтобы узнать больше об этом в дополнение к ссылкам, которые вы получите здесь в этом вопросе. :)
источник
У весны есть контейнер IoC, который несет Мешок Боба; Создание, поддержка и удаление являются обязанностью Spring Container. Мы можем поставить боб в Spring с помощью Wiring и Auto Wiring. Соединение означает, что мы вручную настраиваем его в файл XML, а «Автосоединение» означает, что мы помещаем аннотации в файл Java, а затем Spring автоматически сканирует корневой контекст, где находится файл конфигурации Java, создает его и помещает в пакет Spring.
Вот подробный URI, где вы получили больше информации о бобах
источник
Весенние бобы - это классы. Вместо того, чтобы создавать экземпляр класса (using
new
), вы получаете экземпляр в качествеbean
приведения к типу вашего класса из контекста приложения, где bean-компонент - это то, что вы настроили в конфигурации контекста приложения. Таким образом, все приложение поддерживает экземпляр singleton-scope во всем приложении. Все компоненты инициализируются в соответствии с порядком их настройки сразу после создания контекста приложения. Даже если вы не получаете никаких bean-компонентов в своем приложении, все экземпляры bean-компонентов уже созданы через мгновение после создания контекста приложения.источник
Spring bean - это просто экземпляры объектов, которые управляются контейнером Spring IOC.
Контейнер Spring IOC несет Bag of Bean. Ответственность за создание, поддержание и удаление Bean лежит на Spring Container.
Мы можем поставить боб в Spring с помощью Wiring и Auto Wiring.
Подключение означает, что мы вручную настраиваем его в файл XML.
Auto Wiring означает, что мы помещаем аннотации в файл Java, затем Spring автоматически сканирует корневой контекст, в котором находится файл конфигурации Java, создает его и кладет в пакет Spring.
источник
Бин - это POJO (Простой старый Java-объект), которым управляет контейнер Spring.
Контейнеры Spring по умолчанию создают только один экземпляр компонента. Этот bean-компонент кэшируется в памяти, поэтому все запросы для bean-компонента будут возвращать общую ссылку на один и тот же bean-компонент.
Аннотация @Bean возвращает объект, который Spring регистрирует как bean-компонент в контексте приложения. Логика внутри метода отвечает за создание экземпляра.
Когда мы используем аннотацию @Bean?
Когда автоматическая настройка не вариант. Например, когда мы хотим связать компоненты из сторонней библиотеки, потому что исходный код недоступен, поэтому мы не можем аннотировать классы с помощью @Component.
Сценарий реального времени может заключаться в том, что кто-то хочет подключиться к корзине Amazon S3. Поскольку источник недоступен, ему придется создать @bean.
Источник для кода выше -> https://www.devglan.com/spring-mvc/aws-s3-java
Потому что я упомянул аннотацию @Component выше.
@Component Указывает, что аннотированный класс является «компонентом». Такие классы рассматриваются как кандидаты для автоматического обнаружения при использовании конфигурации на основе аннотаций и сканирования пути классов.
Компонентная аннотация регистрирует класс как один компонент.
источник
В Spring те объекты, которые образуют основу вашего приложения и управляются контейнером Spring IoC, называются bean-компонентами. Бин - это просто объект, который создается, собирается и иным образом управляется контейнером Spring IoC;
источник
Книга: Просто весна
источник
XML-конфигурация Spring состоит из Beans, а Beans в основном являются классами. Это просто POJO, которые мы используем внутри нашего ApplicationContext. Определение Beans можно рассматривать как замену ключевого слова new. Поэтому везде, где вы используете ключевое слово new в вашем приложении, что-то вроде:
Где вы используете это ключевое слово new , вы можете посмотреть, как удалить эту конфигурацию и поместить ее в файл XML. Итак, мы будем кодировать так:
Теперь мы можем просто использовать Setter Injection / Constructor Injection. Я использую Setter Injection.
источник