1. Инъекция зависимостей (DI)
Инъекция зависимости звучит очень глубоко, но на самом деле это: назначить значения атрибутам. Всего есть два метода. Первый находится в форме параметров конструктора, а другой находится в форме метода настройки.
1 инъекция конструктора
1 инъекция с использованием конструктора
Метод впрыска с использованием XML
A. Порядок параметров
<constructor-arg index = "0"> <value> Zhang San </value> </constructor-arg>
<constructor-arg index = "1"> <value> 56 </value> </constructor-arg>
B. Тип параметра
<constructor-arg type = "java.lang.integer"> <value> 56 </value> </constructor-arg>
<constructor-arg type = "java.lang.string"> <value> Zhang San </value> </constructor-arg>
Конкретные примеры
Если вы хотите вводить параметры в класс человека сейчас, студент - еще один класс.
Public Class Person {Private String PID; Приватное название строки; частный студент; Public Perform (String Pid, студент студента) {this.pid = pid; this.student = студент; } public Person (String pid, String name) {this.pid = pid; this.name = name; }}Настройка ApplicationContext.xml. Если конфигурация параметров не будет выполнена, сообщается об ошибке, и соответствующий конструктор не может быть найден. Если соответствующие параметры настроены, соответствующий конструктор должен быть объявлен в классе.
<? xml version = "1.0" Encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id = "Человек">, если параметры. конструктора лично класс является угловым знаком параметра. Значение типа параметра. Если это базовое свойство, используйте это назначение REF, чтобы обратиться к назначению типа-> <constructor-arg index = "0" type = "java.lang.string" value = "aaa"> </constructor-arg> <constructor-arg Index = "1" ref = "Студент"> </contructor-arg> </bean> <bean Id = "perse" pid "</pid" </pid "</pid" </pid "</pid" </pid "</pid" </pid "</pid" </pid "</pid" </pid "</pid" </pid "</pid" </pid "</pid" </pid "</pid" </pid "</pid". value = "1"> </property> </bean> <bean id = "student"> </bean> </beans>
Напишите тестовый класс dixmlconstructortestest и выполните отладку точки останова. Вы обнаружите, что в соответствии с параметрами конфигурации, введенным конструктором является человек (String PID, студент -студент)
открытый класс dixmlconstructortest {@test public void test1 () {ApplicationContext context = new ClassPathXmlApplicationContext ("ApplicationContext.xml"); Лично -личность = (человек) контекст.getbean ("person"); }}2 впрыска с использованием метода установки свойств
Метод впрыска с использованием XML:
A. Инъекция простых бобов Простые бобы включают два типа: тип упаковки и строка
<Bean Id = "Personservice"> <!-Basic Type, тип строки-> <name = "age" value = "20"> </property> <name = "name" value = "Zhang wuji"> </property> </bean>
B. Цитируйте другие бобы
<bean id = "person" /> <bean id = "personservice"> <name = "person" ref = "person" /> < /bean>
1.1 Коллекция списков сборки
<name = "lists"> <siled> <dall> list1 </value> <dall> list2 </value> <ref bean = "person"/> </list> </property>
1.2 Коллекция набора сборки
<name = "sets"> <Set> <date> list1 </value> <dall> list2 </value> <ref bean = "person"/> </set> </свойство>
1.3 Карта сборки
<имя свойства = "maps"> <map> <witch key = "01"> <dalue> map01 </value> </intry> <intry key = "02"> <dall> map02 </value> </intry> </map> </properation>
Значение <pirting> на карте такое же, как и у <Sist> и <set>, что может сделать любой допустимый элемент атрибута. Следует отметить, что значение ключа должно быть строкой.
1.4 СВОДИТЕЛЬНЫЕ СВОБОДЫ
<name = "props"> <props> <prop key = "01"> prop1 </prop> <prop key = "02"> prop2 </prop> </props> </свойство>
Конкретные примеры
1. Создайте два объекта человека и студента
Пакет xgp.spring.demo; import java.util.list; import java.util.map; импорт java.util.properties; import java.util.set; Public Class Person {Private String Pid; Приватное название строки; частный студент; частные списки; частные наборы; карта частной карты; частные объекты недвижимости; частный объект [] объекты; public Person () {System.out.println ("Новое лицо"); } // Опустить методы Getter и Setter} Пакет xgp.spring.demo; public Class Student {public Student () {System.out.println ("Новый студент"); } public void Shows () {System.out.println ("Студент"); }}Настройка файла ApplicationContext.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-Поместите человеку и студент в собственность пружины, используемое для описания значения недвижимости, если это то, что он использует ценность, чтобы поставить ценность, если он использует ценность. If the property is a reference type, use ref to assign value--> <bean id="person" init-method="init" lazy-init="true"> <property name="pid" value="1"></property> <property name="name" value="Wang Ermazi"></property> <property name="student" ref="student"></property> <property name="lists"> <list> <value>list1</value> <value>list2</value> <ref bean="student"/> </property> <property name="sets"> <set> <value>set1</value> <value>set2</value> <ref bean="student"/> </set> </property> <property name="map"> <map> <entry key="entry1"> <value>map1</value> </entry> <entry key="entry2"> <ref bean = "Student"/> </intry> </map> </property> <property name = "properties"> <props> <!-тип ссылки не требуется-> <prop key = "prop1"> prop1 </prop> <prop = "prop2"> prop2 </prop> </props> </property> name = "objects> <sall> <dule> aa> <значение> <значение> <значение> <значение> <значение> <значение> <значение> <значение> <значение> <значение> <значение> <значение> <значение> <значение> <значение> </property> </bean> <bean id = "Студент"> </bean> </beans>
Напишите тестовый класс DixmlSetterTest
Пакет xgp.spring.test; import org.junit.test; import org.springframework.context.applicationContext; import org.springframework.context.support.classpathxmlapplicationContext; импорт xgp.spring.demo.person; Спринг -контейнер делает? (1) Запустите пружинный контейнер* (2) Создайте объект для двух бобов человека и студента* (3) Проанализируйте атрибут имени свойства, сплачивайте метод сеттера, проанализируйте атрибуты значения или ссылки, передайте параметры методу сеттера и используйте технологию отражения, чтобы присвоить значения объекту. * (4) Извлеките объект из пружинного контейнера и вызовите метод объекта. * 2. Каков порядок выполнения пружинных контейнеров? */ @Test public void test1 () {ApplicationContext context = new ClassPathxMlapplicationContext ("ApplicationContext.xml"); Лично -личность = (человек) контекст.getbean ("person"); System.out.println (person.getPid ()); System.out.println (person.getName ()); System.out.println (Person.getLists ()); System.out.println (person.getsets ()); System.out.println (Person.getMap ()); System.out.println (person.getObjects (). Length); }}/*1 wang wu [list1, list2, xgp.spring.demo.student@76a9b9c] [set1, set2, xgp.spring.demo.student@76a9b9c] {entry1 = map1, inpit2 = map2} 2*/// Порядок выполнения весенних контейнеров
1. Все настройки по умолчанию
2. Установите студента (Lazy-init = true)
3. Установите человека (Lazy-init = true)
Суммировать
Есть два метода для введения параметров. Конструктор должен записать соответствующий конструктор, установщик должен генерировать соответствующий метод сеттера, и записан конструктор по умолчанию.
2.5 Значение МОК и DI
Узнав их, что означает его открытие? Давайте напишем пример системы управления документами, чтобы проиллюстрировать требования. См. Рисунок ниже
1. Написать интерфейс документа
Документ публичного интерфейса {public void read (); public void write ();}2. Напишите классы реализации WordDocument, Exceldocument, PDFDocument
открытый класс WordDocument реализует документ {public void Read () {System.out.println ("Word Read"); } public void write () {System.out.println ("Word write"); }}3. Напишите систему DocumentManager
Общественный класс DocumentManager {Private Document Document; public void setDocument (документ документ) {this.document = document; } public DocumentManager () {} public DocumentManager (документ документ) {super (); this.document = документ; } public void read () {this.document.read (); } public void write () {this.document.write (); }}4. Напишите тестовый класс DocumentTest
/**! * Эта строка кода не является полностью ориентированным на интерфейс программирование, потому что конкретный класс появляется в правой стороне равного знака*/ @test public void testdocument_nospring () {document document = new WordDocument (); DocumentManager DocumentManager = New DocumentManager (Document); DocumentManager.read (); DocumentManager.Write (); } /*** На кодовой стороне я не знаю, кто реализует документ. Это определяется файлом конфигурации пружины * <bean id = "documentManager"> <!-Документ-это интерфейс-> <name = "document"> <!-WordDocument-это класс реализации, назначенный интерфейсу документа-> <ref bean = "pdfdocument"/> </propect> </bean> * @test public testdocument_spring (). ClassPathxMlapplicationContext ("ApplicationContext.xml"); DocumentManager DocumentManager = (DocumentManager) context.getBean ("DocumentManager"); DocumentManager.read (); DocumentManager.Write (); }}Из вышеперечисленного мы видим разницу между не применением пружины и применением пружины
<!-DocumentManager, WordDocument, Exceldocument, PDFDocument помещают в пружинный контейнер-> <bean id = "worddocument"> </bean> <bean id = "Exceldocument"> </bean> <bean id = "pdfdocument"> </bean> <bean id = "pdfdocument"> </bean> </bean> </bean> </bean> </bean> </bean> </bean> </bean> </bean> </bean> </bean> </bean> </bean> </bean> </bean> document> </bean> </bean> </bean> </bean> document> </bean> document> </bean> <bean id = " <!-Документ-это интерфейс-> <name = "name =" document "> <!-WordDocument-это класс реализации, назначенный интерфейсу документа-> <ref bean =" pdfdocument "/> </property> </bean>
Использование Spring требует только настройки соответствующего <ref bean = ""> объекта в ApplicationContext, не обращая внимания на конкретные классы реализации и реализацию полного программирования, ориентированного на интерфейс. Вот почему Spring может интегрироваться со многими инструментами.
2,6 MVC моделирование экземпляра Структы2
Описание требования
Создать каталог проекта
Кодирование:
1. Создайте слой DAO, чтобы установить интерфейс Persondao и внедрить класс PersondaoImpl
публичный интерфейс persondao {public void saveperson ();} public class persondaoimpl реализует persondao {@override public void saveperson () {System.out.println ("Save Person"); }}2. Установить уровень обслуживания, интерфейс человека и класс реализации Personserviceimpl
общественный интерфейс Personservice {public void saveperson ();} открытый класс Personserviceimpl реализует Personservice {private persondao persondao; public void setpersondao (persondao persondao) {this.persondao = persondao; } @Override public void saveperson () {this.persondao.saveperson (); }}3. Создание действий, класса PersonAction
Public Class PersonAction {частное лицо лица; public void setPersOnservice (Personservice Personservice) {this.personservice = personservice; } public void savePerson () {this.personservice.saveperson (); }}4. Настройка ApplicationContext.xml
<!-- Put the service,dao,action class into the spring container--> <bean id="personDao"></bean> <bean id="personService"> <property name="personDao"> <ref bean="personDao"/> </property> </bean> <bean id="personAction"> <property name="personService"> <ref bean="personService"/> </property> </bean>
5. Напишите тестовый класс Testmvc
открытый класс mvctest {@test public void testmvc () {ApplicationContext context = new ClassPathxMlapplicationContext ("ApplicationContext.xml"); PersonAction PersonAction = (PersonAction) context.getBean ("PersonAction"); PersonAction.saveperson (); // Сохранить человека}}Приведенный выше пример четко показывает ориентированное на интерфейс программирование пружины. Служба должен только вызывать интерфейс слоя DAO, но не нужно обращать внимание на класс реализации уровня DAO, и действие должно только вызывать интерфейс Сервиса, но не нужно обращать внимание на класс реализации Сервиса.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.