Когда мы работаем над проектом, мы будем использовать слушателя для получения файлов конфигурации пружины, а затем извлекать из него необходимые бобы. Например, чтобы сделать веб -сайт домашней страницей. Предполагая, что фоновая бизнес -логика продукта выполнена хорошо, нам нужно создать слушателя, запрашивать данные домашней страницы в стартапе проекта и поместить его в приложение, то есть метод вызова фоновой бизнес -логики в слушателе, то есть нам необходимо получить соответствующие бобы, настроенные в весне в слушателе. Сначала создайте слушателя:
1. Создайте initDatalistener
Создайте слушатель initAdatalistener наследует ServletContextListener:
/** * @description: todo (используется для инициализации данных при запуске проекта) * @author eson_15 * */// @component // Слушатель является компонентом веб -слоя. Он создается Tomcat, а не создается с помощью весны. Can't be put in Spring public class InitDataListener implements ServletContextListener { private ProductService productService = null;//productService defines the business logic related to the product @Override public void contextDestroyed(ServletContextEvent event) { } @Override public void contextInitialized(ServletContextEvent event) { } }И настроить слушателя в web.xml:
Как упомянуто выше, некоторая бизнес -логика продукта определяется в Product Service, и этот Product Service передается Spring для управления. Так как же получить этот объект? Первое, что нужно быть уверенным в том, что мы не можем выяснить это сами, потому что, если это выйдет, это не имеет ничего общего с IOC Spring ... есть три основных способа его достижения. Мы анализируем его один за другим и, наконец, сравниваем преимущества и недостатки.
2. Загрузите файл beans.xml напрямую
Этот метод прост и груб. Вам не нужно загружать файл конфигурации? Хорошо, я загружаю его следующим образом:
//@Component // Слушатель является компонентом веб -слоя. Это создается Tomcat, а не весной. Нельзя поместить в весенний открытый класс initDatalistener реализует ServletContextLister {productservice productservice = null; //productService defines the business logic related to the product @Override public void contextDestroyed(ServletContextEvent event) { } @Override public void contextInitialized(ServletContextEvent event) { // Get the business logic class productService query product information ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); productservice = (productservice) context.getbean ("productservice"); System.out.println (Product Service); // Вывод, чтобы увидеть, если вы его получите // следующие операции, связанные с продукцией, связанными с продукцией ...}}}}}Этот метод совершенно хорош, и идея очень ясна. Сначала загрузите файл конфигурации beans.xml, а затем получите боб. Однако после запуска Tomcat, давайте посмотрим на вывод информации из консоли:
На этом этапе мы должны найти недостатки этого метода. Файлы конфигурации были загружены дважды, что означает, что эти бобы были созданы дважды. Судя по печатной информации, мы получили бобы, которые сами загрузили файлы конфигурации и были созданы. Этот метод, очевидно, нежелатель.
3. Get от ServletContext
Из приведенного выше метода мы можем, по крайней мере, знать, что Spring загрузила файл конфигурации один раз через слушатель. Нам не нужно загружать его снова. Легко подумать, что если мы знаем, где была загружена пружина, то мы можем получить файл конфигурации оттуда. Давайте посмотрим на процесс загрузки файла конфигурации весной:
На приведенном выше рисунке (нерелевантный код опущен), ContextLoaderListener - это пружинный слушатель, который мы настроили в web.xml. Он также реализует ServletContextListener и наследует контекст -загрузчик. В прослушивателе файл конфигурации в основном получается с помощью метода initWebApplicationContext и создать объект WebApplicationContext. В методе initWebApplicationContext выполняется две основные вещи: одна из них - получить контекст пружины, а другая - поместить контекст пружины в сервистско -контексте, а клавиша: webApplicationContext.Root_web_Application_context_attribute. Так как же получить контекст весны? Он должен получить путь пружины, настроенный в web.xml. Config_location_parm на самом деле является постоянной строки, которая является следующим настроенным Spring Sulderer в web.xml:
<Stext-Param> <param-name> contextConfiglocation </param-name> <!-config_location_parm-это contextconfiglocation-> <param-value> classpath: beans.xml </param-value> </context-param>
Таким образом, очевидно, что вы получаете Beans.xml через путь, настроенный в web.xml, затем загрузите этот файл конфигурации и создаете экземпляр боба.
Теперь, когда мы знаем, что после того, как весна загружает файл конфигурации и помещает его в ServletContext, мы можем пойти сюда и получить его напрямую!
//@Component // Слушатель является компонентом веб -слоя. Это создается Tomcat, а не весной. Нельзя поместить в весенний открытый класс initDatalistener реализует ServletContextLister {productservice productservice = null; @Override public void contextDestroyed (EventContexTevent Event) {// TODO Auto Generated Method stub} @Override public void contextInitialized (EvellContextextent Event) {// Получить информацию о продукте класса бизнес-логика // Решение 2: Когда проект начинается, файл конфигурации пружины загружается через Spring Slierer и STRED в сервизе. Нам просто нужно получить его в сервистском контексте. ApplicationContext context = (ApplicationContext) event.getServletContext () .getAttribute (webApplicationContext.Root_web_application_context_attribute); productservice = (productservice) context.getbean ("productservice"); System.out.println (Product Service); }} Таким образом, мы можем получить созданный объект производителя. Этот метод хорош, но параметры в getattribute слишком длинные. Я не знаю, был ли лоб программиста в то время. Я думаю, он не мог думать о других более подходящих именах ~
4. Загрузка класса инструментов, предоставленного Spring <Br />, может быть, крупные парни, которые разработали Spring, также поняли, что название этого параметра было слишком длинным, поэтому они предоставили класс методов, который может загрузить файл конфигурации:
открытый класс initDatalistener реализует ServletContextLister {productservice productservice = null; @Override public void contextDestroyed (EventContexTexTent Event) {// TODO Auto-генерируемый метод stub} @Override public void contextinialized (EvellContexTexTentevent Event) {// Получить бизнес-запрос класса бизнес-логика WebApplicationContextextectulceplicationContextuTills.getbapplicationContext (Event.getSerfcoreConcersencore); productservice = (productservice) context.getbean ("productservice"); System.out.println (Product Service); }} Фактически, метод GetWebApplicationContext здесь просто инкапсулирует приведенный выше метод. Давайте посмотрим на исходный код этого метода:
public static webPplicationContext getWebApplicationContext (servletContext sc) {return getWebApplicationContext (sc, webApplicationContext.Root_web_application_context_attribute); }Это удобнее для звонков программистам, вот и все ... поэтому мы обычно используем третий метод для получения файла конфигурации Spring, тем самым получая соответствующие создательные бобы.
Оригинальная ссылка: http://blog.csdn.net/eson_15/article/details/51373937
Выше представлено решение iPhone 6splus WeChat Crash. Я надеюсь, что это будет полезно для всех. Я также надеюсь, что все будут поддерживать wulin.com и уделять больше внимания более интересному контенту на wulin.com.