1. Что может сделать весна?
Основная цель весны - сделать J2EE простым в использовании и продвигать хорошие привычки программирования.
Ядро дизайна перевернутой контрольной контейнерной пружины - пакет org.springframework.beans, предназначенный для работы с Javabeans. Этот пакет обычно не используется непосредственно пользователями, но служит основой для большего количества других функциональных услуг. Следующая абстракция более высокого уровня - «фабрика бобов». Завод Spring Bean - это обычная фабрика, которая позволяет извлекать объекты по имени и управлять отношениями между объектами. Фабрики бобов поддерживают два шаблона объекта: Синглтон: В этом шаблоне существует общий экземпляр объекта с определенным именем, который получает при поиске вверх. Это по умолчанию и чаще всего используется. Это идеальный шаблон для без сохранения состояния. .Prototype: В этом режиме будет создан отдельный объект каждый раз, когда получает выборку.
2. Метод загрузки и реализации пружины
Первый: реализовать операции перед инициализацией и уничтожением бобов, аннотируя методы @postconstruct и @predestroy
Второй тип: определить методы init-method и destory-method в XML
Третий тип: реализовать инициализирующие и одноразовые интерфейсы через бобы
Четвертый тип: напишите класс для реализации интерфейса BeanpostProcessor. Этот интерфейс имеет два метода.
(1): Метод постпроцесс -рефинитизации, вызовите этот метод до того, как фасоль, определенный в пружине, инициализируется до того, как боб определяется весной
(2): Метод постпроцессафтеринициализации, вызовите этот метод или реализацию после того, как фасоль, определенный в пружине, инициализируется или инициализируется.
Instantiationawarebeanpostprocessor является поднтерфейсом Beanpostprocessor
Выполнить после загрузки пружинного контейнера
От весеннего слушателя в качестве записи.
org.springframework.web.context.contextloaderListener
Найдите метод для инициализации пружины
/*** Инициализировать контекст корневого веб -приложения. */ @Override public void ContextInitialized (EventContexTexTevent Event) {initWebApplicationContext (event.getServletContext ()); }Введите метод initWebApplicationContext
if (this.context == null) {this.context = createeWeBapplicationContext (ServletContext); } if (this.context encessOf confinewableWebApplicationContext) {conifinationWebApplicationContext cwac = (настраиваемая webApplicationContext) this.context; if (! CWAC.Isactive ()) {// Контекст еще не обновлялся -> предоставить такие услуги, как // Настройка родительского контекста, установка идентификатора контекста приложения и т. Д. if (cwac.getParent () == null) {// Экземпляр контекста был введен без явного родителя -> // определить родитель для контекста корневого веб -приложения, если любой. ApplicationContext parent = LoadParentContext (ServletContext); cwac.setparent (родитель); } configureAndRefreshWebApplicationContext (CWAC, ServletContext); }} ApplicationListener
1. Напишите класс слушателя, который реализует ApplicationListener.
Импорт org.springframework.context.applicationlistener; import org.springframework.context.event.contextrefreshedevent; import org.springframework.stepolype.service; @servicepublic class startuplisteneremplemplessliesselerEnerEner <ContextrexedEvent> OnApplicationEvent (contextrefreshedevent Event) {if (event.getApplicationContext (). getParent () == null) // Контекст корневого приложения не имеет родителя, он является боссом. {// Логический код, который необходимо выполнить, будет выполнен после инициализации пружинного контейнера. System.out.println ("/n/n/n/n/n/n ______________/n/n/n загружен/n/n _________/n/n"); } // или следующий метод if (event.getApplicationContext (). getDisplayName (). equals ("root webPplicationContext")) {System.out.println ("/n/n/n ________/N/N/N загружено один раз/n/n _________/n/n"); }}}2. Установите пакет Service Scan в файле конфигурации (ApplicationContext-servlet.xml)
<!-Зарегистрировать @controller, @service-> <Контекст: компонент-сканирование Base-package = "com.test.controller" use-default-filters = "false"> <context: include-filter type = "annotation" Expression = "org.springframework.stereotype.controller" /> <context: include-filter = "anloTation.Stoytype.controller" /> <Context: include-filter = "annotation". Express = "org.springframework.stereotype.service" /> < /context: component-scan>
3. Развернуть проект запуска и распечатать «загрузку» после загрузки пружины
ApplicationOntext и WebApplicationOntext после использования MVC будут вызовом приведенного выше метода дважды. Как различить эти два контейнера?
Но в настоящее время возникнет проблема. В веб-проекте (SpringMVC) в системе будет два контейнера, один из них является контекстом RootApplication, а другой-наш собственный проект-servletcontext (как субконденнер контекста RootApplication).
В этом случае метод OnaPplicationEvent будет выполнен дважды. Чтобы избежать упомянутых выше проблем, мы можем вызвать логический код только после того, как контекст RootApplication инициализируется. Если инициализация других контейнеров будет завершена, обработка не будет выполнена. После завершения модифицированного кода код будет изменен.
следующее:
@Override public void onApplicationEvent (contextrefreshedevent event) {if (event.getApplicationContext (). GetParent () == null) {// Контекст корневого приложения нет родителя, это босс. // Логический код, который необходимо выполнить, будет выполнен при инициализировании пружинного контейнера. }}Порядок инициализации:
Constructor> @postconstruct> Инициализация Bean> init-method
Суммировать
Выше приведенное дело о первоначальном анализе Spring Framework в этой статье, я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, вы можете оставить сообщение в любое время, и редактор ответит всем вовремя. Спасибо, друзья, за вашу поддержку на этом сайте!