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管理的Bean
UserInfoService userInfoService = (UserInfoService) ApplicationContextHelper.getBean("userInfoService"); 
六、参考

    http://virusfu.iteye.com/blog/1220407



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值