Jetty - 在整合Spring的J2SE應用程式中嵌入Jetty的Web功能(Web中獲取Spring上下文中的Bean)
一、說明
如果開發了一個J2SE的應用程式,然後想用Web來完成一些的使用者介面,但是在啟動 Jetty 之前就已經建立和使用了 Spring 的 ApplicationContext,但這些Web的業務中也要依賴於 Spring 的 ApplicationContext,這樣就會遇到一個問題:原有應用程式和新加Web不在同一個上下文,在Web中如何獲取Spring中管理的Bean呢?
二、建立jetty-context.xml,並在原有的spring中引入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="handler" class="org.eclipse.jetty.webapp.WebAppContext">
<property name="contextPath" value="/admin" />
<property name="resourceBase" value="./webapps/admin" />
<property name="logUrlOnStart" value="true" />
<property name="configurationDiscovered" value="true" />
</bean>
<bean id="server" class="org.eclipse.jetty.server.Server" init-method="start" destroy-method="stop">
<property name="connectors">
<list>
<bean id="Connector" class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<property name="port" value="8080" />
</bean>
</list>
</property>
<property name="handler">
<ref bean="handler" />
</property>
</bean>
</beans>
二、專案中新增web目錄,並在該目錄下完善這個web的jsp或servlet
|--webapps
|--admin
|--WEB-INF
|--web.xml
|--index.jsp
三、建立一個獲取spring管理的bean的工具類(完成上兩步之後,問題來了,在這個web中管理的servlet和原有的Spring中管理的Bean是不同的上下文,不能直接注入)
package com.xilen.util.spring;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
* 通過實現ApplicationContextAware以獲得這個Spring配置所在的上下文
*/
public class ApplicationContextHelper implements ApplicationContextAware {
private static ApplicationContext applicationContext = null;
/**
* 獲得Bean物件
*/
public static <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
/**
* 獲得Bean物件
*/
public static Object getBean(String className) {
return applicationContext.getBean(className);
}
/**
* 獲得應用所在上下文環境
*/
public static ApplicationContext getContext() {
return applicationContext;
}
/**
* 以讓 spring 把 application context 設定進來
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ApplicationContextHelper.applicationContext = applicationContext;
}
}
四、把ApplicationContextHelper配置到應用程式的Spring環境中去<bean id="applicationContextHelper" class="com.xilen.util.spring.ApplicationContextHelper" />
五、最後,在web的servlet中獲取並使用應用程式中Spring管理的BeanUserInfoService userInfoService = (UserInfoService) ApplicationContextHelper.getBean("userInfoService");
六、參考
http://virusfu.iteye.com/blog/1220407
相關文章
- Jetty - 在整合Spring的J2SE應用程式中嵌入Jetty的Web功能(應用和Web共用ApplicationContext)JettySpringWebAPPContext
- Spring在程式碼中獲取bean的幾種方式SpringBean
- WEB應用是如何運用Spring的?#①Spring的IOC容器如何在WEB中建立?WebSpring
- 【譯】用maven使java web應用執行在內嵌的Jetty或TomMavenJavaWebJetty
- 獲取spring裡的beanSpringBean
- jetty、servlet以及spring的銜接原始碼分析JettyServletSpring原始碼
- Spring6 當中 獲取 Bean 的四種方式SpringBean
- 在Spring boot中通過ApplicationContext獲取bean失敗Spring BootAPPContextBean
- jetty啟動web專案原始碼分析JettyWeb原始碼
- 剖析 SPI 在 Spring 中的應用Spring
- 五、Spring Web應用程式構建SpringWeb
- MVC模式在Java Web應用程式中的實現MVC模式JavaWeb
- Spring Boot 應用程式中的 QueryDSLSpring Boot
- Spring中bean的含義SpringBean
- Spring中Bean的作用域SpringBean
- BurpSuite在非Web應用測試中的應用UIWeb
- 用Spring Web Flow和Terracotta搭建Web應用SpringWeb
- Jetty的server模組JettyServer
- Jetty的threadpool模組Jettythread
- Guava Cache本地快取在 Spring Boot應用中的實踐Guava快取Spring Boot
- 設計模式及其在spring中的應用(含程式碼)設計模式Spring
- Spring事件,ApplicationEvent在業務中的應用Spring事件APP
- 責任鏈模式在 Spring 中的應用模式Spring
- Spring 當中的Bean 作用域SpringBean
- Spring中bean的生命週期SpringBean
- IoC在ASP.NET Web API中的應用ASP.NETWebAPI
- 獲取Spring容器中Bean例項的工具類(Java泛型方法實現)SpringBeanJava泛型
- Java 用jetty實現HTTP伺服器 獲取 Get 請求體JavaJettyHTTP伺服器
- Spring與Web環境整合SpringWeb
- web開發實戰教程:Apache Shiro在web專案中的應用WebApache
- SpringBoot中的響應式web應用Spring BootWeb
- Spring中Bean的作用域有哪些?SpringBean
- Spring 中 bean 的迴圈依賴SpringBean
- Spring中bean的四種注入方式SpringBean
- Spring系列(六) Spring Web MVC 應用構建分析SpringWebMVC
- Redis在Web專案中的應用與實踐RedisWeb
- Redis 在 Web 專案中的應用與實踐RedisWeb
- Spring 5 中函式式web開發中的swagger文件Spring函式WebSwagger
- Spring Boot應用程式中的常用註釋列表Spring Boot