Отношения между бобовым и весенним контейнером
Информация о конфигурации бобов определяет реализацию и зависимости бобов. Весенний контейнер устанавливает реестр определения бобов в контейнере на основе различных форм информации о конфигурации бобов, затем загружает и создает экземпляры бобов в соответствии с реестрами и устанавливает зависимости между бобами и бобами. Наконец, эти готовые бобы помещаются в пул кэша с фасолями для вызова внешних приложений.
Эта статья подробно расскажет вам об использовании методов кодирования для динамической настройки бобов весной. Мы поделимся ими на вашу ссылку и обучение. Я не скажу многое ниже, давайте посмотрим на подробное введение вместе.
1 DefaultistableBeanFactory
Default -stistablebeanfactory реализует интерфейс ConfigurableListableBeanFactory, который может динамически вводить бобы через этот класс. Чтобы гарантировать, что инъекционные бобы также могут быть улучшены с помощью AOP, нам необходимо реализовать фабрику фабрики постпроцессорного интерфейса боба BeanFactoryPostProcessor.
Бобы, которые требуют динамического введения:
Public Class Bookservice {bookdao bookdao; public void setbookdao (bookdao bookdao) {this.bookdao = bookdao; } public bookdao getBookdao () {return bookdao; }}Внедрение заводского постпроцессорного интерфейса бобов:
@Componentpublic class bookservicefactorybean реализует beanfactorypostprocessor {public void posteprocessbeanfactory (configurablelistablebeanfactory beanfactory) бросает Beansexception {default -letrablebeanfactory = (default -lectablebeanfactory) beanfactory; // определение бобов BeandefinitionBuilder Builder = BeandefinitionBuilder.GenericBeandefinition (bookservice.class); // Установить недвижимость Builder.AddPropertyReference ("bookdao", "bookdao"); // зарегистрировать определение бобов Factory.RegisterBeanDefinition ("Bookservice1", Builder.getRawbeanDefinition ()); // зарегистрировать экземпляр фабрики фабрики. Регистрации ("Bookservice2", new Net.deniro.spring4.dynamic.bookservice ()); }}Здесь предполагается, что Bookdao был введен в контейнер (метод XML или аннотации).
Здесь мы можем зарегистрировать определение боба или напрямую зарегистрировать экземпляр боба.
Конфигурация:
<Контекст: компонент-сканирование Base-package = "net.deniro.spring4.dynamic" />
ЕДИНЦИОННЫЕ Тесты:
Bookservice Bookservice1 = (Bookservice) Context.getbean ("Bookservice1"); Assertnotnull (Bookservice1); Assertnotnull (Bookservice1.getbookdao ()); Bookservice Bookservice2 = (Bookservice).2 пользовательские теги
Чтобы лучше инкапсулировать компоненты и улучшить их простоту использования, мы определяем компоненты как метки.
Шаги по настройке тега:
Создать bookservice.xsd в папке схемы в ресурсах
<? xml version = "1.0" Encoding = "utf-8"?> <xsd: schema xmlns = "http://www.deniro.net/schema/service" xmlns: xsd = "http://www.w3.org/2001/xmlschema" xmlns:beans="http://www.springframework.org/schema/beans" targetNamespace="http://www.deniro.net/schema/service" elementFormDefault="qualified" attributeFormDefault="unqualified" > <!-- Import beans Namespace --> <xsd:import namespace = "http://www.springframework.org/schema/beans"/> <!-Определите тег книжного обслуживания-> <xsd: name = "book-service"> <xsd: Complextype> <xsd: Completrcontent> <XSD: Extension Base = "Beans: Identiedpe">---------defite>--define>--define>--define>--define>--define>-define>-define> <xsd: extension = "beans: идентифицированный <xsd: атрибут name = "dao" type = "xsd: string" ancysult = "требуется"/> </xsd: endension> </xsd: complexcontent> </xsd: комплекстип> </xsd: элемент> </xsd: schema>
Затем определите анализатор сервисного тега:
Общедоступный класс BooksIedFinitionParser реализует BeandefinitionParser {public beandefinition parse (элемент элемента, parsercontext parsercontext) {// Создать определение бобов BaindefinitionBuilder Builder = BeandefinitionBuilder.GenericBeAndefinition (bookservice.class); // Inject Custom Tagt string dao = element.getAttribute ("dao"); builder.addpropertyreference ("bookdao", dao); // Зарегистрировать Bean define parsercontext.registerbeancomponent (New BeancomponentDefinition (Builder .getRawbeanDefinition (), "Bookervice")); вернуть ноль; }}Затем зарегистрируйте анализатор, который вы только что определили в пространстве имен:
Общедоступный класс bookserviceNamespacehandler расширяет именам пространственно -чистости {public void init () {RegisterBeanDefinitionParser ("Book-Service", New BookseedFinitionParser ()); }}Затем создайте папку Meta-Inf в ресурсах и создайте Spring.schemas и Spring.Handlers, которые используются для настройки пути файла структуры документа на пользовательском теге и анализатора, который анализирует пользовательское пространство имен.
Файл Путь
Spring.handlers:
http/: //www.deniro.net/schema/service=net.deniro.spring4.dynamic.bookservicenamespacehandler
Spring.schemas:
http/: //www.deniro.net/schema/service.xsd=schema/bookservice.xsd
Примечание. Файл XSD должен быть размещен в каталоге ресурсов потомков.
Цитирование пользовательских тегов:
<? xml version = "1.0" Encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: me = "http://www.deniro.net/schema/service" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.spramework.org/schema/beans/spring-beans.xs.s.xs.spring-beans.s. http://www.deniro.net/schema/service http://www.deniro.net/schema/service.xsd "> <bean id =" bookdao "/> <me: book-service dao =" bookdao "/> </beans>
Здесь мы ссылались на пользовательский тег в голове и назвали его «Я», и тогда мы можем использовать его O (∩_∩) O ~
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.