1. Особенности пружины
Весна имеет следующие основные особенности:
- легкий: Spring является ненавязчивым, в котором объекты не зависят от конкретных классов Spring;
- Инверсия управления (IoC): через IoC продвигается низкая связанность, и другие объекты, от которых зависит объект, передаются пассивно без активного создания или поиска объекта;
- Аспектно-ориентированный (АОП): поддерживает аспектно-ориентированное программирование и отделяет уровень бизнес-логики приложения от уровня системных служб;
- контейнер: содержит и управляет конфигурацией и жизненным циклом объектов приложения.В настоящее время Spring эквивалентен контейнеру;
- коллекция кадров: Простые компоненты можно настраивать и объединять в более сложные приложения; в Spring объекты приложений декларативно объединяются в XML-файле; кроме того, Spring также предоставляет базовые функции, такие как управление транзакциями и интеграция среды хранения, оставляя разработку логики приложения на усмотрение пользователя. разработчик;
2. Компоненты пружинного сердечника
Spring представляет собой многоуровневую архитектуру, в основном состоящую из следующих семи модулей. Модули Spring находятся в основном контейнере и определяют, как создаются, настраиваются и управляются bean-компоненты.
- Spring Core: Предоставляет основные функции среды Spring.Основным компонентом является BeanFactory, который является реализацией фабричного шаблона.Спецификации конфигурации и зависимостей приложения отделены от фактического кода приложения с помощью механизма IOC.
- Spring Context: файл конфигурации, который предоставляет контекстную информацию для Spring Framework, включая корпоративные службы, такие как JNDI, EJB, электронная почта, интернационализация, проверка и планирование.
- Spring AOP: Благодаря функциям управления конфигурацией Spring AOP напрямую интегрирует функциональные возможности AOP (аспектно-ориентированные) в среду Spring. Таким образом, мы можем легко использовать среду Spring для управления любым объектом, поддерживающим АОП. Модули предоставляют службы управления транзакциями для объектов в приложениях на основе Spring. С помощью этого компонента Jiujiang Declarative Transaction Management можно интегрировать в приложение, не полагаясь на другие компоненты.
- Spring DAO: Уровень абстракции JDBC DAO обеспечивает осмысленную иерархию исключений, которую можно использовать для управления обработкой исключений и сообщениями об ошибках, создаваемыми различными поставщиками баз данных. Иерархия исключений упрощает обработку ошибок и значительно сокращает объем кода исключений, который необходимо написать. Исключения Spring DAO, ориентированные на JDBC, следуют общей иерархии исключений DAO.
- Spring ORM: несколько фреймворков ORM вставлены в фреймворк Spring для предоставления объектно-реляционных инструментов ORM, включая JDO, Hibernate и iBatis SQL Map, которые следуют общей иерархии транзакций и исключений DAO Spring;
- Spring Web: модуль веб-контекста построен поверх модуля контекста приложения для обеспечения контекста для веб-приложений, поэтому платформа Spring поддерживает интеграцию с Jakarta Structs. Модуль также упрощает обработку составных запросов и привязку параметров запроса к объектам домена.
- Spring MVC: MVC — это полнофункциональная реализация MVC для создания веб-приложений, которую можно гибко настраивать для среды MVC через интерфейс стратегии. И MVC также поддерживает такие технологии просмотра, как JSP, Velocity, Tiles и т. д.
3. Весенние общие аннотации
аннотация | иллюстрировать |
---|---|
@Controller |
1. Используется для маркировки компонентов управляющего слоя. 2. Используется для обозначения класса, чтобы указать, что он является объектом контроллера SpringMVC. 3. Процессор распространения просканирует метод класса, использующий аннотацию, и определит, использует ли метод @RequestMapping 4. уметь Request проситьheader Значение части привязано к параметру метода |
@RestController |
эквивалентно@Component а также@ResponseBody Комбинация |
@Component |
Относится к компоненту в целом, если компонент плохо классифицирован, он аннотируется |
@Repository |
для аннотацииDAO слой, вDaoImpl Аннотация в классе |
@Service |
Используется для аннотирования компонентов бизнес-уровня. |
@ResponseBody |
1. Асинхронный запрос 2. Используется для преобразования Controller Метод возвращает объект, которому переданы соответствующиеHttpMessageConverter После преобразования в указанный формат записать вResponse объектbody область данных3. Возвращаемые данные не html страница, но какой-то другой формат данных (json, xml) |
@RequestMapping |
Аннотация, используемая для обработки отображения адреса запроса, используемого для класса или метода, при использовании в классе означает, что все методы в классе, которые отвечают на запросы, используют этот адрес в качестве родительского пути. |
@Autowired |
Аннотируйте переменные-члены класса, методы и конструкторы для завершения автоматической сборки.@Autowired использовать для устраненияget、set метод |
@PathVariable |
Используется для сопоставления переменных шаблона в URL-адресе запроса с параметрами метода обработки функции, то есть взять переменные в шаблоне URL-адреса в качестве параметров |
@RequestParam |
Используется для получения параметров в слое управления фоном Spring MVC, подобноrequest.getParameter("name")
|
@RequestHeader |
будетRequest проситьheader Значение части привязано к параметру метода |
@ModelAttribute |
вController Эта аннотация выполняется до вызова всех методов, которые можно использовать в аннотациях и параметрах метода. |
@SessionAttributes |
поместите значение вsession охват, удалитьClass над |
@Valid |
Проверка данных объекта, используемая с Hibernate Validator |
@CookieValue |
Получатьcookie стоимость в |
4. Принцип ИО
4.1 Определения
Spring описывается конфигурационным файломBean
Взаимозависимости между использованием возможностей отражения Java для создания экземпляровBean
и построитьBean
зависимости между. Контейнер IoC Spring на основе выполнения этой низкоуровневой работы также предоставляетBean
Кэширование экземпляров, управление жизненным циклом,Bean
Расширенные услуги, такие как прокси экземпляра, публикация событий и загрузка ресурсов;
В итоге:IOC отвечает за создание объектов, управление объектами (через внедрение зависимостей), интеграцию объектов, настройку объектов и управление жизненным циклом объектов.;
4.2 Общий вид контейнера Spring
- Прочитайте первым, когда начнется весна
Bean
информацию о конфигурации и создать соответствующую копию в контейнере Spring.Bean
настроить реестр; - Согласно сгенерированному на предыдущем шаге
Bean
Настройте реестр для создания экземпляраBean
, и собралBean
зависимости между; - будет создан экземпляр
Bean
загружается в контейнер SpringBean
В пуле буферов он используется приложениями верхнего уровня;
4.3 Объем и жизненный цикл Spring Bean
4.3.1 Область применения
В Spring объекты, составляющие тело приложения и управляемые контейнером Spring IoC, называются bean-компонентами. Короче говоря, компонент — это объект, который инициализируется, собирается и управляется контейнером IoC.
Области действия Bean в основном следующие:
- Синглтон
Область примененияSingleton
,Этот режим небезопасен при многопоточности, что указывает на то, что в контейнере IoC есть только один общий экземпляр Bean, и все запросы на Bean в основномid
соответствует определению bean-компонента, то возвращается тот же экземпляр bean-компонента.Singleton
Это одноэлементная модель, то есть объект Bean создается автоматически при создании контейнера, независимо от того, используется он или нет, иОбъект, полученный каждый раз, является одним и тем же объектом.
- Прототип: используется каждый раз при создании
Область примененияPrototype
, указывая на то, что определение bean-компонента соответствует нескольким экземплярам, и bean-компонент в этой области вызоветНовый экземпляр компонента создается каждый раз, когда запрашивается компонент..Prototype
Это тип-прототип, который не создается при создании контейнера, но создает объект, когда мы получаем bean-компонент, и каждый раз получаемый объект отличается.
- Запрос: запрашивать один экземпляр за раз
Область примененияRequest
,показать за один разHTTP
запрос, контейнер возвращает тот же экземпляр bean-компонента, то есть каждыйHTTP
Каждый запрос имеет собственный экземпляр компонента, который создается в соответствии с определением компонента и действителен только в случае Web-приложения Spring ApplicationContext. когда однаждыHTTP
Когда обработка запроса завершается, все экземпляры компонентов в этой области уничтожаются.
- Session
Область примененияSession
,показыватьвHTTP Session
, контейнер возвращает один и тот же экземпляр компонента, но для разныхSession
запрос создает новый экземпляр, которыйBean
Экземпляр только в настоящее времяSession
действует в течение, который действителен только в случае веб-приложения Spring ApplicationContext. когдаHTTP Session
Когда bean-компоненты в этой области устарели, они также будут признаны недействительными.
класс области видимости | иллюстрировать |
---|---|
Singleton |
В контейнере Spring IoC есть только один экземпляр Bean, который существует как синглтон, что является значением по умолчанию в Spring. |
Prototype |
Новый экземпляр возвращается каждый раз, когда bean-компонент вызывается из контейнера, т. е. каждый вызовgetBean() метод, эквивалентныйnew новый объект |
Request |
Создает новый компонент для каждого HTTP-запроса, работает только в среде WebApplicationContext. |
Session |
Каждый сеанс HTTP использует общий компонент, разные сеансы используют разные компоненты, применимые только к среде WebApplicationContext. |
4.3.2 Жизненный цикл
- Spring создает экземпляр Bean;
- Spring вводит значение и ссылку на Bean в соответствующее свойство Bean;
- Если компонент реализует интерфейс BeanNameAware, Spring передает идентификатор компонента методу setBeanName();
- Если компонент реализует интерфейс BeanFactoryAware, Spring вызовет
setBeanFactory()
метод, передайте ссылку на приложение, в котором находится бин; - Если компонент реализует интерфейс ApplicationContextAware, Spring вызовет
setApplicationContext()
метод, передайте ссылку на приложение, в котором находится бин; - Если компонент реализует интерфейс BeanPostProcessor, Spring вызовет
post-ProcessBeforeInitalization()
метод; - Если Бин реализует
InitializingBean
интерфейс, Spring вызовет ихafter-PropertiesSet()
метод, аналогично, если бин используетinit-method
Если объявлен метод инициализации, этот метод также будет вызван; - Если компонент реализует интерфейс BeanPostProcessor, Spring вызовет их
post-ProcessAfterInitialization()
метод; - На этом этапе bean-компоненты готовы, и мы можем их использовать приложением, они останутся в контексте приложения, пока приложение не будет уничтожено;
- Если компонент реализует интерфейс DisposableBean, Spring вызовет его
destory()
методы интерфейса; опять же, если бин используетdestroy-method
Объявлен метод Destroy, этот метод также будет вызываться;
4.4 Четыре способа внедрения зависимостей Spring
- Внедрение конструктора
// 带参,方便用构造器进行注入
public CatDaoImpl(String name){
this.name = name;
}
<bean id="CatDaoImpl" class="com.cunyu.CatDaoImpl">
<constructor-arg value="name"></constructor-arg>
</bean>
- инъекция сеттерного метода
public class Id {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
<bean id="id" class="com.cunyu.Id ">
<property name="id" value="1801333"></property>
</bean>
- статический заводской впрыск
Так называемая статическая фабрика предназначена для получения требуемых объектов путем вызова метода статической фабрики, и для облегчения управления Spring мы не можем получать объекты через «метод class.static()», а должны вводиться в виде весны;
// 静态工厂
public class DaoFactory {
public static final FactoryDao getStaticFactoryDaoImpl(){
return new StaticFacotryDaoImpl();
}
}
public class SpringAction {
// 需要注入的对象
private FactoryDao staticFactoryDao;
// 注入对象的 set 方法
public void setStaticFactoryDao(FactoryDao staticFactoryDao) {
this.staticFactoryDao = staticFactoryDao;
}
}
<bean name="springAction" class="com.cunyu.SpringAction" >
<!--利用静态工厂的方法注入对象-->
<property name="staticFactoryDao" ref="staticFactoryDao"></property>
</bean>
<!--从工厂类获取静态方法-->
<bean name="staticFactoryDao" class="com.cunyu.DaoFactory" factory-method="getStaticFactoryDaoImpl"></bean>
- фабрика экземпляров
Фабрика экземпляров означает, что метод получения экземпляра объекта не является статическим, поэтому вам нужно сначалаnew
Фабричный класс, а затем вызывать обычные методы экземпляра;
// 实例工厂
public class DaoFactory {
public FactoryDao getFactoryDaoImpl(){
return new FactoryDaoImpl();
}
}
public class SpringAction {
// 注入对象
private FactoryDao factoryDao;
public void setFactoryDao(FactoryDao factoryDao) {
this.factoryDao = factoryDao;
}
}
<bean name="springAction" class="com.cunyu.SpringAction">
<!--使用实例工厂的方法注入对象,对应下面的配置文件-->
<property name="factoryDao" ref="factoryDao"></property>
</bean>
<!--此处获取对象的方式是从工厂类中获取实例方法-->
<bean name="daoFactory" class="com.cunyu.DaoFactory"></bean>
<bean name="factoryDao" factory-bean="daoFactory" factory-method="getFactoryDaoImpl"></bean>
4.5 Метод автоматической сборки пружины
Для достижения автоматической сборки она в основном реализуется со следующих двух точек зрения:
- Сканирование компонентов: Spring автоматически обнаружит bean-компоненты, созданные в контексте приложения;
- Автопроводка: Spring автоматически удовлетворяет зависимости между bean-компонентами;
Комплект пружин включаетРучная передача и автоматическая сборка,Ручная сборка производитсяXML
сборка, метод строительства,setter
метод и др.;
Существуют следующие типы автоматического связывания, которые позволяют контейнеру Spring выполнять внедрение зависимостей посредством автоматического связывания;
Метод сборки | иллюстрировать |
---|---|
no |
Нет автоматического подключения по умолчанию, если явно указатьref свойства для сборки |
byName |
Через автосвязывание имени параметра контейнер Spring находит в конфигурационном файлеBean изautowire свойство установлено наbyName После попытки сопоставить, загрузите и этоBean свойства с тем же именемBean
|
byType |
При автоподключении типа параметра контейнер Spring находит в файле конфигурацииBean изautowire свойство установлено наbyType После попытки сопоставить, загрузите и этоBean однотипные свойстваBean , если несколькоBean Если условие выполнено, выдать ошибку |
constructor |
похожий наbyType , но его нужно указать в параметре конструктора, если нет фиксированного типа параметра конструктора с параметрами, будет выброшено исключение |
autodetect |
Сначала попробуйте использоватьconstructor для автоподключения, если это не сработает, используйтеbyType Способ |
4.6 Преимущества и недостатки IoC
- преимущество: разделение между компонентами для повышения удобства обслуживания и гибкости программы;
- недостаток: шаги по созданию объекта сложны, и есть определенная стоимость обучения, использование отражения для создания объекта снизит эффективность;
5. Принципы АОП
5.1 Определения
То есть проанализируйте внутреннюю часть инкапсулированного объекта и инкапсулируйте общедоступное поведение, влияющее на несколько классов, в повторно используемый модуль и назовите его какAspect
,касательная. Так называемый разрезЭто не имеет никакого отношения к бизнесу, но логика, разделяемая бизнес-модулями, удобна для сокращения повторяющегося кода системы, уменьшения степени связанности между модулями и облегчения последующей работоспособности и ремонтопригодности..
Используя crosscuts, АОП разделяет программное обеспечение на:Основные и сквозные проблемы. Основной поток бизнес-процессов является основной задачей и имеет мало общего со сквозными задачами.Характеристики сквозных проблем заключаются в том, что они часто возникают в нескольких местах основной проблемы и в основном одинаковы везде.. Роль АОПРазделение различных проблем в системе, разделение основных и сквозных проблем.
5.2 Основные концепции
5.3 Два прокси-режима АОП
Spring предоставляет два способа создания прокси-объектов: JDK Proxy и CGlib.Стратегия по умолчанию заключается в использовании технологии динамического прокси JDK, если целевой класс является интерфейсом, в противном случае используйте CGlib для создания прокси.;
- Прокси динамического интерфейса JDK
В основном участвуетProxy
а такжеInvocationHandler
,InvocationHandler
Это интерфейс, который определяет сквозную логику путем реализации интерфейса и вызывает код целевого класса через механизм отражения для динамической компиляции сквозной логики и бизнес-логики вместе. а такжеProxy
затем используйтеInvocationHandler
Динамически создавать экземпляр, соответствующий определенному интерфейсу, и генерировать прокси-объект целевого класса;
- Динамический прокси CGlib
полное имяCode Generation Library
,Это высокопроизводительная высококачественная библиотека для генерации кода, которая может расширять классы Java и реализовывать интерфейсы Java во время выполнения.CGlib инкапсулирует ASM и может динамически генерировать новые классы во время выполнения.
- Разница между динамическим прокси JDK и динамическим прокси CGlib
Динамический прокси JDK может создавать экземпляры прокси только для интерфейсов, а для классов, не определяющих бизнес-методы через интерфейсы, необходимо создавать динамические прокси через CGlib;
5.4 Типы уведомлений для Аспектов
- До уведомления: целевой метод вызывает уведомление перед вызовом;
- Опубликовать уведомление (после): уведомление о вызове после завершения целевого метода;
- После возвращения: Уведомление о вызове после успешного выполнения целевого метода;
- Уведомление об исключении (после броска): уведомление о вызове после того, как целевой метод выдает исключение;
- Вокруг уведомлений (вокруг): выполнение пользовательского поведения до и после вызова метода с уведомлением;
6. Spring MVC
6.1 Что такое структура MVC?
MVC, полное название Model View Controller, является аббревиатурой от model-view-controller и представляет собой модель проектирования программного обеспечения. Организуйте код таким образом, чтобы разделить бизнес-логику, данные и отображение интерфейса, объединить бизнес-логику в один компонент, а затем улучшить и настроить интерфейс и взаимодействие с пользователем без переписывания бизнес-логики;
Основные преимущества использования шаблона проектирования MVC заключаются в следующем:
- Благодаря многоуровневому дизайну реализуется структура между компонентами бизнес-системы, что способствует масштабируемости и ремонтопригодности бизнес-системы;
- Способствует параллельному развитию системы и повышению эффективности разработки;
6.2 SpringMVC
6.2.1 Определения
Spring MVC — это модуль среды Spring, основанной на MVC;
6.2.2 Компоненты
-
DispatcherServlet
: основной компонент, интерфейсный контроллер, также называемый центральным контроллером, который планирует связанные компоненты,Используется для получения результатов запроса и ответа, эквивалентного повторителю, сDispatcherServlet
уменьшить связь между другими компонентами; -
HandlerMapping
: сопоставитель обработчика, который сопоставляется с разными путями URLHandler
; -
HandlerAdapter
: Адаптер процессора, согласноHandlerAdapter
правила для обеспечения соблюденияHandler
; -
Handler
: процессор, разработанный нами под бизнес; -
ViewResolver
: синтаксический анализатор представлений, который анализирует логические представления в определенные представления; -
View
: интерфейс, поддерживающий различные типы представлений;
6.2.3 Рабочий процесс MVC
- Браузер отправляет запрос, передняя панель управления
DispatcherServlet
перехватить запрос; -
DispatcherServlet
После перехвата запроса проанализируйте URL-адрес запроса, получите URI идентификатора ресурса запроса и выполните вызов в соответствии с URI.HandlerMapping
Затем получите соответствующийHandler
; -
DispatcherServlet
получатьHandler
После этого найдитеHandlerAdapter
, через который можно получить доступHandler
, и запустить процессор; - воплощать в жизнь
Handler
логика, возвращаетModelAndView
ВозражатьDispatcherServlet
; - потом
DispatcherServlet
проситьViewResolver
Разобрать представление, разобрать реальное представление на основе имени логического представления.View
; - потом
ViewResolver
будет проанализированView
Вернуться кDispatcherServlet
, тогда правильноView
оказывать; - затем по
DispatcherServlet
реагировать на просмотр в браузере;
6.2.4 Преимущества SpringMVC
- Имеет характеристики Весны;
- Поддержка нескольких представлений;
- Простота настройки, неинвазивность;
- Слои более четкие, что способствует поддержанию кода, разработанного командой, и читабельность хорошая;
6.3 Примечания
6.3.1 Принцип аннотации
Аннотация представляет собой интегрированныйAnnotation
Специальный интерфейс, конкретный класс реализации которого является динамическим прокси-классом, созданным средой выполнения Java. Когда аннотация получена посредством отражения, возвращается динамический прокси-объект, сгенерированный средой выполнения Java. Вызов метода пользовательской аннотации через прокси-объект в конечном итоге вызоветAnnotationInvocationHandler
изinvoke
метод, то метод начинается сmemberValues
изMap
Индексируйте соответствующее значение;
6.3.2 Общие примечания
аннотация | иллюстрировать |
---|---|
@RequestMapping |
для обработки запросовurl Аннотацию сопоставления можно использовать в классах или методах.При использовании в классах это означает, что все методы, отвечающие на запросы, используют этот адрес в качестве родительского пути. |
@RequestBody |
осуществлять приемHTTP просилjson данные, будетjson Преобразовать в объект Java |
@ResponseBody |
реализация будетcontroller Метод возвращает объект в объект Json и отвечает клиенту |