Прежде всего, чтобы узнать, как вводить бобы весной, вы должны сначала понять, что такое инъекция зависимости. Инъекция зависимости относится к: пусть класс вызывного класса внедряет зависимость класса реализации класса реализации определенного интерфейса, введенной третьей стороной, чтобы устранить зависимость класса вызывающего класса от класса реализации определенного интерфейса.
Методы инъекции зависимостей, поддерживаемые в пружинных контейнерах в основном, включают в себя инъекцию свойств, инъекцию конструктора и инъекцию фабричного метода. Далее мы подробно рассмотрим эти три метода впрыска зависимостей и их конкретные методы конфигурации.
1. Инъекция атрибута
Внедрение атрибута означает, что инъекция значения атрибута или зависимый объект боба с помощью метода setxxx (). Поскольку метод инъекции атрибута является селективным и гибким, он также является наиболее часто используемым методом впрыска в реальном развитии.
Spring сначала вызовет конструктор по умолчанию бобов, чтобы создать экземпляр объекта Bean, а затем вызовать метод SET с помощью отраженного метода для внедрения значения свойства.
Внедрение свойств требует, чтобы бобы предоставили конструктор по умолчанию и должны предоставить устанавливающий метод для свойств, которые необходимо вводить.
Советы: так называемый конструктор по умолчанию, то есть конструктор без параметров. Если в классе нет пользовательского конструктора, система (JVM) автоматически генерирует конструктор по умолчанию без параметров. Если конструктор с параметрами явно настроен в классе, система не будет автоматически генерировать конструктор по умолчанию, и вам необходимо вручную добавить конструктор без параметров.
Ниже приведен пример для демонстрации метода впрыскивания бобов весной:
Напишите пользовательский класс:
пакет com.kevin.bean;/** * Создать метод внедрения на тестовый бобов класса * @author kevin * */public class user {private String username; public String getUsername () {return username; } public void setUsername (string username) {this.username = username; }}Файл конфигурации:
<? 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: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.spramework.org/schema/beans/springbeans.s.xspringbeansbeans.s.xspringbeans.s.xspringbeans.s.xspringbeans/springbeans.s.xspring.sspring.sspring.s.spers.springbeans/spring-beans.s.spersbemans./www.spramework. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here --> <!-- configuration object --> <bean id="user"> <property name="username"> <value>Kevin</value> </property> </beans>
Среди них каждое значение свойства соответствует теге свойства, а значение свойства имени является именем свойства в классе. В классе реализации Bean он имеет соответствующий метод реализации setusername ().
Советы: пружина будет только проверять, содержит ли боб метод сеттера, и не представляет конкретных требований для того, есть ли соответствующие переменные атрибута. Однако, согласно обычным правилам, мы должны установить соответствующие переменные атрибута для него.
Технические характеристики имен для тегов <свойства> весной:
Вообще говоря, имена переменных атрибутов Java начинаются с строчных букв, но, учитывая некоторые английские аббревиатуры с особыми значениями, бобы Java также позволяют имена переменных, начинающиеся с заглавных букв. Но следующие два момента должны быть соблюдены:
Для методов инъекции атрибутов гарантии могут быть предоставлены только в файле конфигурации искусственно, но гарантии не могут быть предоставлены на уровне синтаксиса. В настоящее время вам нужно использовать инъекцию конструктора, чтобы лучше удовлетворить требования.
2. Инъекция конструктора
Инъекция конструктора является еще одним часто используемым методом впрыска, помимо инъекции атрибутов. Это может гарантировать, что некоторые необходимые свойства устанавливаются при создании бобов и могут использоваться после экземпляра.
Предварительным условием для использования конструктора является то, что бобы должны предоставить конструктор с аргументами.
Для введения конструктора файлы конфигурации могут использоваться следующими способами:
【Метод ввода параметра сопоставления по типу】
Напишите код бобов:
пакет com.kevin.bean;/** * Напишите тест на бобов, чтобы соответствовать параметрам по типу * @author kevin * */public class person {private String name; частный целый возраст; public String getName () {return name; } public void setName (string name) {this.name = name; } public integer getage () {return Age; } public void setage (целый возраст) {this.age = age; }}Написать файлы конфигурации:
<? 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: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.spramework.org/schema/beans/springbeans.s.xspringbeansbeans.s.xspringbeans.s.xspringbeans.s.xspringbeans/springbeans.s.xspring.sspring.sspring.s.spers.springbeans/spring-beans.s.spersbemans./www.spramework. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-Определения Beans здесь-> <!-объект конфигурации-> <bean Id =" Человек "> <Sustructor-AR </constructor-arg> <constructor-arg type = "integer"> <dure> 20 </value> </constructor-arg> </beans>
Файлы конфигурации Spring используют стратегии конфигурации, которые не зависят от порядок метки элементов, поэтому определенность информации о конфигурации может быть гарантирована в определенной степени.
Затем, когда параметры нескольких типов конструктора в бобах одинаковы, легко вызвать путаницу, сопоставляя параметры в соответствии с типом. В настоящее время необходим другой метод: соответствие параметров в соответствии с индексом.
【Параметры соответствия в соответствии с индексом】
Напишите код бобов:
Пакет com.kevin.bean;/** * Напишите тесты и параметры в методе индекса * @author Kevin * */public Class Student {private String name; частный строковый пол; частный двойной счет; Общественный студент (название строки, строковое пол, двойной счет) {super (); this.name = name; this.gender = пол; this.score = оценка; }}Файл конфигурации записан следующим образом:
<? 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: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.spramework.org/schema/beans/springbeans.s.xspringbeansbeans.s.xspringbeans.s.xspringbeans.s.xspringbeans/springbeans.s.xspring.sspring.sspring.s.spers.springbeans/spring-beans.s.spersbemans./www.spramework. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-Определения Beans здесь-> <!-объект конфигурации-> <bean Id =" Студент "> <Constructor-arg Index =" 0 "0" 0 "0" 0 "0" 0 "0" 0 "0" 0 "0". value = "kevin"> </constructor-arg> <constructor-arg index = "1" value = "male"> </constructor-arg> <constructor-arg index = "2" value = "66"> </constructor-arg> </bean> </beans>
Советы: Во время введения свойства пружина определяет атрибут конфигурации и соответствующий метод сеттера в соответствии со спецификациями бобов Java и использует механизм отражения Java для вызова метода сбора атрибута для завершения введения свойства. Тем не менее, механизм отражения Java не помнит имя параметра конструктора, поэтому мы не можем настроить конструктор, сформулируя имя параметра конструктора, поэтому мы можем лишь косвенно завершить инъекцию свойства конструктора через тип параметра и индекс.
【Комбинированные параметры типа использования и сопоставления индексов】
В некоторых сложных файлах конфигурации тип и индекс необходимо использовать одновременно для завершения введения параметра конструктора. Вот пример для демонстрации.
Напишите бобы:
пакет com.kevin.bean;/** * Напишите тестирование бобов, чтобы использовать параметры типа и сопоставления индексов вместе * @author kevin * */public class учитель {private String name; частный строковый адрес; частная двойная зарплата; частный int возраст; Общественный учитель (название строки, строковый адрес, двойная зарплата) {super (); this.name = name; this.address = адрес; это .salary = зарплата; } public Security (String name, строковый адрес, int age) {super (); this.name = name; this.address = адрес; this.age = возраст; }}В этом классе есть два перегруженных конструктора, и все они имеют три параметра. В этом случае использование методов типа и индекса не может выполнить требования. В настоящее время оба их свойства должны использоваться одновременно.
Файл конфигурации:
<? 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: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.spramework.org/schema/beans/springbeans.s.xspringbeansbeans.s.xspringbeans.s.xspringbeans.s.xspringbeans/springbeans.s.xspring.sspring.sspring.s.spers.springbeans/spring-beans.s.spersbemans./www.spramework. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-определения Beans здесь-> <!-объект конфигурации-> <bean id =" Учитель "> <Constructor-ard index =" hypretex = "0". <dulch> Kevin </value> </constructor-arg> <constructor-arg index = "1" type = "string"> <value> china </value> </constructor-arg> <constructor-arg index = "2" type = "int"> <dature> 20 </value> </contructor-arg> </bean> </beans> </value> </contructor-arg> </bean>
Вы можете видеть, что фокус на самом деле сосредоточен на типе третьего параметра, поэтому мы указываем индекс и вводим в файл конфигурации, чтобы пружина мог знать, какой конструктор для ввода параметра.
Советы: добавьте в наш файл конфигурации, возникает проблема двусмысленности. Весенний контейнер может быть запущен нормально и не будет сообщать об ошибке. Он случайным образом использует соответствующий конструктор для создания бобов. Пользователь может не понадобиться случайно выбранным конструктором, поэтому мы должны быть осторожны, чтобы избежать этой двусмысленности при программировании.
【Параметры соответствия через свое собственное отражение типа】
Если тип параметра конструктора бобов заметен, поскольку механизм отражения Java может получить тип параметра конструктора, даже если инъекция конструктора не предоставляет информацию типа и индекса, пружина все еще может завершить инъекцию конструктора. Например, в следующем примере тип параметров конструктора класса менеджера можно различить.
Написать менеджер класс:
пакет com.kevin.bean;/** * Напишите тест на бобы, чтобы соответствовать аргументам через свой собственный тип отражения * @author Kevin * */public Class Manager {private String name; частная двойная зарплата; частное лицо; Публичный менеджер (название строки, двойная зарплата, человек) {super (); this.name = name; это .salary = зарплата; this.person = человек; }}Написать файлы конфигурации:
<? 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: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.spramework.org/schema/beans/springbeans.s.xspringbeansbeans.s.xspringbeans.s.xspringbeans.s.xspringbeans/springbeans.s.xspring.sspring.sspring.s.spers.springbeans/spring-beans.s.spersbemans./www.spramework. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-определения Beans здесь-> <!-объект конфигурации-> <Bean Id ="> <SustructureTAR> <! </constructor-arg> <constructor-arg> <ref bean = "user"/> </constructor-arg> <constructor-arg> <ref bean = "person"/> </constructor-arg> </beans>
Приведенные выше методы могут реализовать впрыск параметров конструктора, но чтобы избежать возникновения проблем, рекомендуется использовать явный индекс и ввести для настройки информации о вводе параметра конструктора.
3. Инъекция фабричного метода
Метод завода представляет собой дизайн-шаблон, который часто используется в приложениях, а также является основным методом реализации идеи управляющей инверсии и дизайна с одним средством. Заводский класс отвечает за создание одного или нескольких экземпляров класса фабрики. Метод фабричного класса обычно возвращает экземпляр целевого класса в форме интерфейса или переменной абстрактного класса.
Заводский класс блокирует этапы экземпляра целевого класса извне, и вызывающему абоненту даже не нужно указывать, что такое конкретный целевой класс. Потому что пружинные контейнеры обеспечивают функциональность заводских методов в рамочных методах и открыты для разработчиков прозрачным образом. Следовательно, редко необходимо писать инженерные методы вручную. Тем не менее, инженерные методы по-прежнему будут встречаться в некоторых устаревших системах или сторонней библиотеке. В настоящее время для введения пружины можно использовать метод инъекции Spring Factory.
Методы инъекции пружинной фабрики могут быть разделены на статические и нестатические.
【Нестатический фабричный метод】
Некоторые заводские методы нестативны и должны быть созданы до того, как могут быть вызваны фабричные методы. Ниже приведен пример для демонстрации.
Напишите фабричный класс:
пакет com.kevin.factorybean;/** * Напишите тестирование класса фабрики. Нестатический фабричный метод Внедрение * @author Kevin * */public Class BookFactory {public BookBook () {Book Book = New Book (); Book.SetName («Подумайте на Java»); возвращение книги; }}Написание файлов конфигурации:
<? 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: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.spramework.org/schema/beans/springbeans.s.xspringbeansbeans.s.xspringbeans.s.xspringbeans.s.xspringbeans/springbeans.s.xspring.sspring.sspring.s.spers.springbeans/spring-beans.s.spersbemans./www.spramework. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-Определения Bean здесь-> <!-объект конфигурации-> <bean id =" bookfactory "> </bean> <bean id =" Bean Id = "Bean> <Bean> <Bean> <Bean> <Bean> <Bean> <Bean> <Bean> <Bean> <Bean> <Bean> <Bean> Factory-bean = "bookFactory" factory-method = "buybook"> </bean> </beans>
Поскольку заводский метод книги не является статичным, вам нужно сначала определить бобы класса завода, а затем обратиться к экземпляру фабрично-фабричности через собственность фабрики. Затем соответствующий фабричный метод используется для указания соответствующего фабричного метода.
【Статический фабричный метод】
Многие методы фабричного класса являются статичными, что означает, что методы фабричного класса могут быть вызваны без создания экземпляров класса фабрики. Следовательно, статические инженерные методы являются более удобными и кратким, чем нестатические фабричные методы. Ниже приведен пример для демонстрации статического фабричного метода.
Напишите фабричный класс:
пакет com.kevin.factorybean;/** * Напишите тест на фабрику класса статический метод фабрики внедрение * @author kevin * */public class carfactory {public static car createcar () {car car = new Car (); car.setbrand ("lamborghini"); вернуть машину; }}Написать файлы конфигурации:
<? 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: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.spramework.org/schema/beans/springbeans.s.xspringbeansbeans.s.xspringbeans.s.xspringbeans.s.xspringbeans/springbeans.s.xspring.sspring.sspring.s.spers.springbeans/spring-beans.s.spersbemans./www.spramework. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-Определения фасоли здесь-> <!-Beanseceme> </bean> </beans> </beans> </beanse> <//beans> <//beans> <//beanse-beean> <//beanse-beean </!
Суммировать
Spring предоставляет три дополнительных метода впрыска, но в реальных приложениях нет единого стандарта, для которого мы должны выбрать. Вот несколько причин для обозначения:
Причина инъекции конструктора:
Свойства Инъекция Причина:
Фактически, Spring предоставляет нам так много методов для введения параметров, поэтому эти методы должны иметь свои собственные причины. Каждый метод имеет уникальные преимущества в определенной проблеме. Нам нужно только выбрать соответствующий метод в соответствии с нашими конкретными потребностями в использовании, но впрыск метода фабрики обычно не рекомендуется.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.