предисловие
Если и существует какой-либо фреймворк, который неизбежно будут изучать и использовать Java-программисты, то Spring должен быть одним из них. Этот блог будет систематическим обзором использования Spring блогерами в их повседневной работе.
Некоторые концепции и идеи Spring
Ядро Spring: АОП, IOC.
Проще говоря, это передача объектов Spring для управления и реализация некоторых «шаблонных» операций посредством аспектно-ориентированного программирования, освобождая программистов для того, чтобы уделять больше внимания бизнес-реализации.
Spring уже является универсальным фреймворком с открытым исходным кодом и формирует экосистему Spring.
О МОК
IOC с операционной точки зрения реализуется либо с помощью конфигурации XML, либо с помощью аннотаций. В реальной разработке способ аннотирования становится все более популярным.
Вам необходимо импортировать зависимости и ссылаться на ограничения схемы XML в соответствии с используемыми функциями.
Имя и расположение основного файла конфигурации Spring не фиксированы, но в реальной разработке он обычно указывается как applicationContext-xxx.xml. Этот способ имеет два преимущества: во-первых, конфигурационными файлами Spring можно управлять в модулях, а во-вторых, за счет унифицированного префикса удобно регулярно загружать эти конфигурационные файлы.
Создание XML-конфигурации bean-компонентов
Сделайте это напрямую через
,Предпосылка заключается в том, что класс имеет конструктор без параметров (принцип, лежащий в основе этого, создается посредством отражения). Этот метод наиболее часто используется на практике, конечно, существуют также статические фабрики и фабрики экземпляров. Еще один момент, на который следует обратить внимание: является ли компонент одноэлементным или множественным?
существует в теге beanscopeАтрибуты используются для описания:
синглтон: синглтон, по умолчанию
прототип: несколько экземпляров
запрос/сеанс и т. д.
Внедрение свойства компонента: способ XML
XML-создание bean-компонентов осуществляется посредством отражения, так как же работает внедрение атрибутов bean-компонентов?
При создании bean-компонента вы можете предоставить параметризованный конструктор для его установки;
Вы можете установить его, предоставив метод установки; (наиболее часто используемый)
Какая инъекция интерфейса, какая инъекция пространства имен P, они на самом деле не используются...
<bean id="" class="">
или </bean>
Либо используйте значение, чтобы напрямую указать значение свойства, либо обратитесь к другому компоненту по ссылке.
Создание и внедрение bean-компонентов на основе аннотаций
Поскольку для реализации аннотаций Spring требуется поддержка АОП, необходимо обратить внимание на зависимости.Во-вторых, необходимо включить сканирование аннотаций в XML:
<context:component-scan base-package="" />
Фактически, эта конфигурация заставит Spring сканировать указанный пакет, создавать экземпляр bean-компонента с флагом аннотации и выполнять внедрение свойств. (вы можете обратиться к«Написание моего первого фреймворка: миниатюрный Spring MVC»)
4 аннотации для создания объектов:
@Component/@Controller/@Service/@Repository
В этих 4 аннотациях идентификатор bean-компонента указывается через атрибут value, через@scopeСотрудничайте, чтобы объявить одиночный ИЛИ множественный. (В настоящее время эти 4 функции аннотаций одинаковы, просто чтобы сделать цель класса аннотаций более ясной, и Spring оставил руку, может быть, это улучшит функцию в будущем?)
Как внедрить свойства?
@Autowired/@Resource/@Qualifier
Следует отметить, что @Resource находится в пакете javax, который предоставляется J2EE, а @Autowired предоставляется Spring. (Не нужно предоставлять метод установки)
@Resource вводится по имени по умолчанию, если не найден, вводится по типу.
@Autowired вводится по типу по умолчанию и может комбинироваться с @Qualifier для внедрения имени.
Итак, на что нам нужно обратить внимание?
Если @Autowired выполняет внедрение типов, вполне вероятно, что будет несколько типов удовлетворения (полиморфизм), так какой из них будет внедрен? Итак, если вы вводите по типу @Autowired, вы должны обратить внимание на это в сочетании с @Qualifier. Очевидно, что в реальной разработке внедрение должно быть детерминированным, поэтому внедрение по имени должно быть первым выбором!
IOC VS DI
IOC, инверсия управления, DI, внедрение зависимостей;
Только при передаче объекта в Spring Spring может помочь завершить настройку свойства, поэтому внедрение зависимостей не может существовать само по себе, и операцию нужно выполнять на основе IOC.
О АОП
Реализация АОП, механизма горизонтального извлечения, основана на шаблоне динамического прокси.
Несколько ключевых концепций АОП:
JoinPoint: точка соединения, грубо говоря, это метод, который можно улучшить;
PointCut: точка входа, которую JoinPoint перехватывает;
Совет: уведомление — действие после перехвата;
Аспект: Аспект, процесс применения улучшений к конкретным методам;
АОП Spring должен быть реализован с помощью aspectj, что можно сделать с помощью XML или аннотаций.
Например, если используется XML-метод, необходимо указать, какой метод класса A следует использовать для улучшения того или иного метода класса B, который включает в себя выражение выполнения;
Например, проще использовать метод аннотации, сначала включить АОП (
) в XML, а затем напрямую использовать что-то вроде @Before(value="execution(определенное выражение)) в методе расширения) ") возможно; На самом деле, в реальной разработке чаще всего для АОП используются транзакции.
Весеннее управление транзакциями
Декларативное управление транзакциями Spring в основном основано на аннотациях. Прежде всего, нам нужно настроить диспетчер транзакций, а диспетчер транзакций требует от нас внедрить DataSource (пул соединений DBCP, c3p0 и т. д.), что легко понять, поскольку это транзакция БД. Как вы знаете, Spring предоставляет разные классы реализации транзакций для разных платформ уровня DAO (Spring JDBC/MyBatis/Hibernate...).
Мы можем увидеть пример:
Конечно, для нескольких источников данных нам нужно определить несколько менеджеров транзакций, а также включить аннотации транзакций. Несколько менеджеров транзакций можно отличить по атрибуту квалификатора.
После завершения настройки непосредственно в классе или методе сервисного уровня используйте
@Transactional(value = "gcs", rollbackFor = Exception.class)
Принцип Spring и веб-интеграция
Оперативно это настроить прослушиватель в web.xml, а затем указать файл конфигурации Spring.
В каждом WEB-проекте есть объект ServletContext, и слушатель, который мы настраиваем, должен отслеживать его. Слушатель загружает файл конфигурации Spring, помещает созданный объект в поле ServletContext (то есть метод setAttribute) и получает объект. можно напрямую получить атрибут!
Ну вот и закончилось весеннее расчесывание!
счастливый Национальный день!
2017-10-06 by zhangfengzhe