在Eclipse RCP中使用Spring

简介:
注:在发完此文后,我惊奇的发现在新版Eclipse中(我用的是3.2M6)已经不需要转换ClassLoader。估计这是RCP的一个BUG,已经被FIX。希望各位同学共同验证一下,如果是这样的话,这篇文章也就没有什么意义了。


在RCP中使用Spring,最关键的一点在于spring配置文件的读取,因为RCP使用自己的ClassLoader,所以用通常的方法是无法装载Spring的配置文件。解决的思路是:在读取Spring配置文件时将RCP的ClassLoader暂时换一下。

在这里我根据Spring配置文件在项目中的存放位置,给出两种办法。

一、配置文件存放在源代码根目录下。

假设我有一个叫admin_console的项目,我把Spring的配置文件myspring.xml放在源代码根据目录src下,如下图所示
admin_console
      --src
           --cn      //包名
               --com
                  --chengang  
                      ---......     //源代码类
          --myspring.xml      //Spring配置文件,位于src目录下和cn目录平级
      --bin
      --lib
      --icons
      --properties


那么我们在RCP程序中可以这样来装载myspring.xml
        ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
         try {
            Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
             ctx = new ClassPathXmlApplicationContext("/myspring.xml");
        }  finally {
            Thread.currentThread().setContextClassLoader(oldLoader);
        }



二、配置文件存放在项目根目录的某个子目录下

项目根目录和源代码根目录是不同的两个概念。如上图的项目结构中,src是源代码根目录,admin_console是项目根目录,那么properties就是项目根目录下的一个子目录。

如果将myspring.xml放入到properties目录中,以上的读取代码就没用了,读取方法如下:

        ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
         try {
            Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
   ctx = new FileSystemXmlApplicationContext(ProjectUtil.toFullPath("properties/myspring.xml"));
        }  finally {
            Thread.currentThread().setContextClassLoader(oldLoader);
        }

其中ProjectUtil.toFullPath是我自己写的一个方法,主要是得到myspring.xml的绝对路径,其代码如下:

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
 
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.ui.plugin.AbstractUIPlugin;
 
import com.wxxr.management.admin.console.AdminConsolePlugin;
 
/**
 * 用于插件项目和非插件项目,提供两者通用的方法接口
 * @author chengang 2006-3-30
 */
public class ProjectUtil {
 
    private static AbstractUIPlugin plugin = AdminConsolePlugin.getDefault();
 
    private ProjectUtil() {}
 
    /**
     * 判断当前的运行状态是否为插件方式
     * @return true=插件方式运行
     */
    private static boolean isPlugin() {
        return plugin != null;
    }
 
    public static URL getURL(String path) {
        if (isPlugin())//如果是插件
            return FileLocator.find(plugin.getBundle(), new Path(path), null);
        else
            try {
                return new URL("file:" + path);
            } catch (MalformedURLException e) {
                throw new RuntimeException(path + " is error", e);
            }
    }
 
    public static InputStream getInputStream(String path) {
        URL url = getURL(path);
        try {
            return url.openStream();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
 
    public static String toFullPath(String path) {
        if (isPlugin()) {
            try {
                return FileLocator.toFileURL(ProjectUtil.getURL(path)).getPath();
            } catch (IOException e) {
                throw new RuntimeException(path + " toFullPath is fault", e);
            }
        } else {
            return path;
        }
    }
 
}
目录
相关文章
|
Java 测试技术 Android开发
|
11月前
|
Java 应用服务中间件 Android开发
Eclipse创建Spring项目
本文介绍了在Eclipse中创建Spring项目的步骤,包括如何配置Tomcat服务器、创建项目、部署项目到Tomcat以及添加Spring框架所需的JAR包。
279 1
Eclipse创建Spring项目
|
设计模式 前端开发 Java
Spring Boot之Spring MVC的工作原理 以及使用eclipse开发Spring MVC的Web应用实战(附源码)
Spring Boot之Spring MVC的工作原理 以及使用eclipse开发Spring MVC的Web应用实战(附源码)
181 0
|
XML IDE Java
Eclipse中 Spring Tool 插件 Spring IDE-STS
Eclipse中 Spring Tool 插件 Spring IDE-STS
272 0
Eclipse中 Spring Tool 插件 Spring IDE-STS
|
XML Java 数据库连接
Eclipse spring boot MyBatis1.4插件安装及自动生成xml、domain、mapper
在使用Eclipse 开发spring boot 时自动生成对象、mapper接口、domain,在此备忘方便后面查阅 新版本的mybatis会作一些调整,具体的操作方式可看我的另外一篇文章: https://developer.aliyun.com/article/1168902?spm=a2c6h.26396819.creator-center.12.12ed3e18lXUFoo
677 0
Eclipse spring boot MyBatis1.4插件安装及自动生成xml、domain、mapper
|
XML Java API
Spring框架入门以及Eclipse创建 Spring项目
Spring框架入门以及Eclipse创建 Spring项目
Spring框架入门以及Eclipse创建 Spring项目
|
Java Android开发 Spring
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象
189 0
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象
|
Java Android开发 数据安全/隐私保护
spring练习,使用Eclipse搭建的Spring开发环境,属性注入通过构造方法方式实现,模拟用户的正常登录。
spring练习,使用Eclipse搭建的Spring开发环境,属性注入通过构造方法方式实现,模拟用户的正常登录。
163 0
spring练习,使用Eclipse搭建的Spring开发环境,属性注入通过构造方法方式实现,模拟用户的正常登录。
|
Java Android开发 Spring
sping练习,在Eclipse搭建的Spring开发环境中,使用工厂方式创建Bean对象,将创建的Bean对象输出到控制台。
sping练习,在Eclipse搭建的Spring开发环境中,使用工厂方式创建Bean对象,将创建的Bean对象输出到控制台。
288 0
sping练习,在Eclipse搭建的Spring开发环境中,使用工厂方式创建Bean对象,将创建的Bean对象输出到控制台。
|
Java Android开发 Spring
spring练习,使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打印输出。
spring练习,使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打印输出。
199 0
spring练习,使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打印输出。

推荐镜像

更多