Недавно я купил эту весеннюю вводную книгу: Springinaction. Я просмотрел грубо и чувствовал себя довольно хорошо. Просто немного начинать. Книги Мэннинга все еще хороши. Хотя я не сосредотачиваюсь на Мэннинге, как на тех, кто читает только книги Мэннинга, я читаю это через это с почтением и страстью. Я снова принял основные концепции пружины, такие как IOC, DI и AOP. Позвольте мне сначала поговорить о моем мнении о МОК и Ди.
МОК (DI): На самом деле, концепция основной весенней архитектуры не так сложна, и она не такая неясная, как описано в некоторых книгах. Все программисты Java знают, что каждая бизнес -логика в программе Java требует как минимум двух или более объектов для сотрудничества. Как правило, когда каждый объект использует свой партнерский объект, он должен использовать синтаксис, такой как NewObject (), чтобы завершить работу приложения объекта партнера. Вы обнаружите, что связь между объектами высока. Идея МОК: пружинные контейнеры, чтобы реализовать создание и координацию этих взаимозависимых объектов. Объекты должны иметь только саму бизнес -логику отношений. В связи с этим ответственность за то, как объект получает свой совместный объект, изменяется (IOC, DI).
Это мой опыт весеннего МОК. Ди на самом деле еще один способ сказать МОК. DI был впервые предложен Мартином Фаулером в статье в начале 2004 года. Он пришел к выводу: что контролирует контроль? То есть: способ получения зависимых объектов изменен.
Если вы еще не понимаете эту основную концепцию: здесь мы процитируем простой и простой для понимания ответ, найденный в блоге под названием Bromon:
МОК и ди
Во -первых, я хочу поговорить о МОК (InversionofControl, контроль инверсии). Это ядро пружины, повсюду. Для весенней структуры Spring отвечает за контроль жизненного цикла объекта и взаимосвязи между объектами. Что это значит? Чтобы привести простой пример, как мы находим девушку? Общая ситуация заключается в том, что мы идем везде, чтобы увидеть, где у нас есть красивые и красивые женщины, а затем спрашиваем о их интересах, номерах QQ, номере телефонных номеров, номерах IQ ..., найдите способы узнать их, дать им то, что они любят, а затем хе-хе ... этот процесс сложный и глубокий, и мы должны сами познакомиться и познакомиться с каждым звеном. То же самое относится и к традиционной разработке программ. В объекте, если вы хотите использовать другой объект, вы должны получить его (новый самостоятельно или запросить один из JNDI). После использования объект должен быть уничтожен (например, соединение и т. Д.), А объект всегда будет объединен с другими интерфейсами или классами.
Так как же это делает МОК? Это немного похоже на поиск девушки через брачное агентство и представление третьей стороны между мной и моей девушкой: агентством для брака. Баржельное агентство управляет много информации о мужчинах и женщинах. Я могу предоставить список брачному агентству и рассказать ему, какую девушку я хочу найти, например, выглядеть как Мишель Рейс, иметь такую фигуру, как Лин XILEI, пение, как Джей Чоу, с такой скоростью, как Карлос, и иметь такую технологию, как Зидан. Затем брачное агентство предоставит MM в соответствии с нашими требованиями. Нам просто нужно влюбиться и выйти замуж. Это просто и ясно. Если кандидаты, данные нам, не соответствуют требованиям, мы сделаем исключение. Весь процесс больше не контролируется мной, но контролируется контейнером, подобным учреждению, таким как агентство для брака. Это метод разработки, защищенный весной. Все классы будут зарегистрированы в весеннем контейнере, чтобы рассказать, что вы есть и что вам нужно. Тогда Spring даст вам то, что вы хотите, когда система выходит на соответствующий уровень, и в то же время передает вам другие вещи, которые вам нужны. Все классы создаются и уничтожаются весной, что означает, что объект, который контролирует жизненный цикл объекта, больше не является объектом, который ссылается на него, а пружина. Для конкретного объекта он использовал для управления другими объектами, но теперь все объекты управляются пружиной, так что это называется управляющей инверсией.
Одна из ключевых моментов МОК - динамически предоставить объект с другими объектами, которые ему нужны во время работы системы. Это достигается посредством di (зависимость). Например, объект A должен работать с базой данных. В прошлом мы всегда писали код в A, чтобы получить объект соединения. С пружиной нам нужно только сказать Spring, что подключение необходимо в A. Что касается того, чтобы построить это соединение и когда его построить, A не нужно знать. Когда система работает, Spring создаст соединение в соответствующее время, а затем введет его в подобную инъекцию, что завершит контроль взаимосвязи между каждым объектом. Необходимо полагаться на соединение, чтобы работать нормально, и это соединение вводится в пружину, и из этого исходит название инъекции зависимостей. Так как же реализован DI? Важной особенностью после Java 1.3 является отражение, которое позволяет программе динамически генерировать объекты, выполнять методы объектов и изменять свойства объектов при запуске. Весна вводится через отражение. Для связанной информации о рефлексии, пожалуйста, обратитесь к Javadoc.
После понимания понятий МОК и DI все станет простым и ясным, а остальная часть работы - просто накапливать блоки в рамках пружины.
Давайте узнаем, как работает весна.
public static void main (string [] args) {applicateContext context = new FileSystemxMlapplicationContext ("ApplicationContext.xml"); Животное животное = (животное) контекст.getbean ("Animal"); Animal.say (); }Вы должны быть знакомы с этим кодом, но давайте проанализируем его. Во -первых, ApplicationContext.xml
<bean id = "Animal"> <name = "name" value = "kitty" /> < /bean>
У него есть класс phz.springframework.test.cat
Общедоступный класс Cat реализует Animal {private String name; public void Shower () {System.out.println ("I Am Am" + name + "!");} public void setName (string name) {this.name = name;}}Реализовано phz.springframework.test.nimal interface
Public Interface Animal {public void Shoid (); }Очевидно, что приведенный выше код выводит Iamkitty!
Так как это делает весна?
Затем давайте сами напишем весну, чтобы увидеть, как работает весна!
Во -первых, мы определяем класс бобов, который используется для хранения свойств, принадлежащих бобам
/ * Идентификатор бобов */ private String Id; / * Класс бобов */ private String Type; / * Свойство Bean */ Private Map <String, Object> Properties = new Hashmap <String, Object> ();
Бин включает в себя удостоверение личности, типа и свойства.
Следующая весна начинает загружать наш файл конфигурации и сохраняет информацию о конфигурации в HashMap. Ключом HashMap является идентификатор бобов, а значение Hasmap - это фасоль. Только таким образом мы можем получить класс животных с помощью метода контекста. Getbean ("Animal"). Мы все знаем, что Spirng может вводить основные типы и может вводить типы, такие как список и карта. Далее, давайте возьмем карту в качестве примера, чтобы увидеть, как сохраняется пружина
Конфигурация карты может быть похожа на следующее
<bean id = "test"> <name = "testmap"> <map> <intpirt key = "a"> <value> 1 </value> </inpit> <intpirt key = "b"> <значение> 2 </value> </intry> </map> </properation> </bean>
Как Spring сохраняет вышеуказанную конфигурацию? Код заключается в следующем:
if (beanproperty.element ("map")! = null) {map <string, object> propertiesmap = new hashmap <string, object> (); Element propertieslistmap = (element) beanproperty.elements (). Get (0); Iterator <?> Propertiesiterator = PropertiesListmap.Elements (). Iterator (); while (propertiesiterator.hasnext ()) {element vet = (element) propertiesiterator.next (); if (vet.getName (). equals ("entry")) {string key = vet.attributevalue ("key"); Iterator <?> Valuesterator = vet.Elements (). Iterator (); while (valuesterator.hasnext ()) {element value = (element) valuestIterator.next (); if (value.getName (). Equals ("value")) {propertiesMap.put (key, value.getText ()); } if (value.getName (). Equals ("ref")) {propertiesMap.put (key, new String [] {value.attributeValue ("bean")}); }}}} bean.getProperties (). Put (name, PropertiesMap); }Далее, давайте перейдем к основной части. Посмотрим, как весна является инъекцией зависимости. На самом деле, идея инъекции зависимости также очень проста. Он реализован с помощью механизма отражения. При создании класса он вводит атрибуты класса, хранящиеся в HashMap в класс, отражая метод SET в классе. Посмотрим, как это сделано.
Сначала создать класс, как это
public Static Object newInstance (String classname) {class <?> cls = null; object obj = null; try {cls = class.forname (classname); obj = cls.newinstance ();} catch (classnotfoundexcept (Allosalaccessexception e) {бросить новое runtimeexception (e);} return obj;}Затем он вводит в него зависимости этого класса, как это
public static void setProperty (Object obj, string name, string value) {class <? extends object> clazz = obj.getClass (); try {string methodname = returnSetMthodName (name); method [] ms = clazz.getMethods (); for (method m: ms) {if (m.getname (). equals (methodname)) {if (m.getParameterTypes (). M.GetParameterTypes () [0]; SetFieldValue (clazzParameterType.getName (), значение, m, obj); break;}}}}} catch (securityException e) {throw new Runtimeexexcept Runtimeexception (e);}}Наконец, он возвращает нам экземпляр этого класса, и мы можем его использовать. Давайте возьмем карту в качестве примера, чтобы увидеть, как это сделано. Код, который я написал, состоит в том, чтобы создать HashMap и внедрить HashMap в класс, который необходимо ввести, как это
if (value ancessionof map) {iterator <?> entryTerator = ((map <?,?>) значение). EntrySet (). iterator (); Map <string, object> map = new hashmap <string, object> (); while (intrintiterator.hasnext ()) {entry <?,?> entrymap = (intpirt <?,?>) entryiterator.next (); if (entrymap.getValue () exantemOf string []) {map.put ((string) entryMap.getKey (), getBean (((string []) intryMap.getValue ()) [0])); }} Beanprocesser.setProperty (obj, Property, map); }Итак, мы можем использовать Spring, чтобы создать для нас класс. Разве это не сложно? Конечно, весна может сделать больше, чем эта. Эта программа примера предоставляет только часть наиболее основной функции впрыскивания зависимости Spring.
Эта статья ссылалась на большое количество статей и не может поблагодарить вас один за другим. Спасибо здесь вместе. Прошу прощения за ваше нарушение авторских прав. Я надеюсь, что это будет полезно для всех!
Суммировать
Выше приведено все содержание этой статьи о подробном объяснении принципов весенних МОК, и я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на этот сайт:
Краткое понимание примеров IOC, AOP и кода весны и кода
Подробное введение в реализацию симуляции IOC весны
Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!