您的位置:首页 > 编程语言 > Java开发

使用WebContainer中的Spring 常用方法

2009-05-18 19:41 603 查看
Spring 的初始化

一、Spring在web.xml的配置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:spring/*.xml
</param-value>
</context-param>

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
如上配置就可以在web container中使用Spring了,但有时还会有另一种需求,就是我不要Spring显式或隐式的注入,而是需要在一个工具类中,来获取Spring的相关信息,直接调用Spring Container的相关的方法,以下是一种简单的实现方法.
二、构建自己的工具类

1.创建Container接口
package com.iman.demo.framework;
public interface Container {
public abstract Object getComponent(String name);

}
2.创建Engine 接口
package com.iman.demo.framework;
import javax.servlet.ServletContext;
public interface Engine {

public void startEngine();
public void init(ServletContext servletContext);
public void stopEngine();
public void reloadEngine();
public abstract Container getContainer();
}

3.创建 AbstractEngine 实现 Engine接口的抽象类
package com.iman.demo.framework.spring;
import com.iman.demo.framework.Container;
import com.iman.demo.framework.Engine;
public abstract class AbstractEngine implements Engine{
public AbstractEngine() {
}
}

4.创建AbstractEngine的派生类 SpringEngine
package com.iman.demo.framework.spring;
import javax.servlet.ServletContext;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.iman.demo.framework.Container;
import com.iman.demo.framework.Engine;
public class SpringEngine extends AbstractEngine{
private Container container;
private static ApplicationContext applicationContext;
public SpringEngine() {
System.out.println("Spring Engine is starting...");
}

public void init(ServletContext servletContext){
applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
container = new SpringContainer(applicationContext);
}
public void reloadEngine() {
}
public void setContainer(Container container) {
this.container = container;
}
public void startEngine() {
}
public void stopEngine() {
}
public Container getContainer() {
return container;
}
}

5.创建 Container 的实现类 SpringContainer
package com.iman.demo.framework.spring;
import org.springframework.context.ApplicationContext;
import com.iman.demo.framework.Container;
public class SpringContainer implements Container {
private ApplicationContext applicationContext;
public SpringContainer(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
public Object getComponent(String name) {
return applicationContext.getBean(name);
}
}

6.创建 Framework 工具类
package com.iman.demo.framework;
import javax.servlet.ServletContext;
import com.iman.demo.framework.spring.SpringEngine;
public class Framework {
private String webroot;
private static Engine engine = new SpringEngine();
private Container container;
public static Engine getEngine(){
return engine;
}
public static Engine createEngine(Class clazz,ServletContext servletContext){
try {
engine = (Engine)clazz.newInstance();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
engine.init(servletContext);
return engine;
}
}

7.创建 Servlet Listener
package com.iman.demo.framework.spring;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.iman.demo.framework.Engine;
import com.iman.demo.framework.Framework;
public class FrameworkStartListener implements ServletContextListener{

public void contextDestroyed(ServletContextEvent arg0) {
}
public void contextInitialized(ServletContextEvent event) {
String start = event.getServletContext().getInitParameter("engine");
try {
Class clazz = Class.forName(start);
ServletContext servletContext = event.getServletContext();
Framework.createEngine(clazz, servletContext);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}

好啦,所有的接口以及实现类,工具类等都建好了,现在就配置一下web.xml文件
添加内容如下:
<context-param>
<param-name>engine</param-name> <param-value>com.iman.demo.framework.spring.SpringEngine</param-value>
</context-param>

<listener> <listener-class>com.iman.demo.framework.spring.FrameworkStartListener</listener-class>
</listener>

一切OK,WebContainer 启动后,就可以调用Framework中的方法了。
FrameworkStartList 根据 engine的配置参数来调用 Framework 中的createEngine方法来初始化Spring的相关信息到该工具类中。这只是一个简单配置和方法,具体的需求可以以此为基础,或作为参考,来完成更加复杂和灵活的用法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐