`

加载项目中所有spring配置文件 java 代码

阅读更多

 

这个类要在启动程序时候调用一下

package com.sinitek.sirm.common.spring;

import com.sinitek.base.starter.IStarter;
import com.sinitek.sirm.common.utils.URLUtils;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.AbstractXmlApplicationContext;
import org.springframework.core.io.*;

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

/**
 * File Desc:
 * Product Name: SIRM
 * Module Name: BaseDase
 * Author:      刘建
 * History:     11-6-2 created by 刘建
 */
public class SpringContextStarter extends AbstractXmlApplicationContext implements IStarter {

    private ApplicationContext appCtxt = null;

    private Resource[] configResources;

    public SpringContextStarter() {
    }

    public SpringContextStarter(Resource[] resources) {
        super(null);
        this.configResources = resources;
        refresh();
    }


    protected Resource[] getConfigResources() {
        return this.configResources;
    }

    public void start(Properties properties) throws Exception {
        // 资源存放地
        String _location = properties.getProperty("location");
        int _len = _location.length();
        try {
            List _resources = new ArrayList();
            ClassLoader _loader = Thread.currentThread().getContextClassLoader();
            for (Enumeration _enum = _loader.getResources(_location); _enum.hasMoreElements();) {
                URL _url = (URL) _enum.nextElement();
                String _protocol = _url.getProtocol();
                String _externalForm = URLUtils.toExternalForm(_url);
                String _path = URLUtils.getPath(_url);
                if (_protocol.equals("jar")) {
                    String _root = _location + "/";
                    int i = _path.indexOf('!');
                    String _prefix = _path.substring(0, i + 1);

                    ZipFile _file = new ZipFile(i >= 0 ? _path.substring(6, i) : _path);
                    for (Enumeration _enumeration = _file.entries(); _enumeration.hasMoreElements();) {
                        ZipEntry _entry = (ZipEntry) _enumeration.nextElement();
                        if (!_entry.isDirectory()) {
                            String _name = _entry.getName();
                            if (_name.startsWith(_root)) {
                                if (_name.endsWith(".xml")) {
                                    _resources.add(new UrlResource(_externalForm + _name.substring(_len)));
                                }
                            }
                        }
                    }
                } else if (_protocol.equals("file")) {
                    File[] _files = new File(_url.toURI()).listFiles();
                    for (int i = 0; i < _files.length; i++) {
                        File _file = _files[i];
                        if (!_file.isDirectory()) {
                            _resources.add(new FileSystemResource(_file));
                        }
                    }
                }
            }
            appCtxt = new SpringContextStarter((Resource[]) _resources.toArray(new Resource[0]));
            SpringFactory.setAppCtxt(appCtxt);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
    }


    public void destroy() {
        ((AbstractApplicationContext) appCtxt).destroy();
    }
}

 

 

工厂类:

package com.sinitek.sirm.common.spring;

import org.springframework.context.ApplicationContext;

import java.util.ArrayList;
import java.util.List;

/**
 * File Desc:
 * Product Name: SIRM
 * Module Name: BaseDase
 * Author:      刘建
 * History:     11-6-2 created by 刘建
 */
public class SpringFactory {

    private static ApplicationContext appCtxt = null;

    public static <T> T getBean(Class<T> clazz) {
        T _result = null;
        if (appCtxt != null) {
            String[] _names = appCtxt.getBeanNamesForType(clazz);
            if (_names != null && _names.length > 0) {
                _result = (T) appCtxt.getBean(_names[0]);
            }
        }
        return _result;
    }

    public static <T> T getBean(String beanName, Class<T> clazz) {
        return appCtxt != null ? (T) appCtxt.getBean(beanName, clazz) : null;
    }

    public static Object getBean(String beanName) {
        return appCtxt != null ? appCtxt.getBean(beanName) : null;
    }

    public static <T> T[] getBeans(Class<T> clazz) {
        T[] _result = null;
        String[] _names = appCtxt.getBeanNamesForType(clazz);
        if (_names != null) {
            List<T> _list = new ArrayList<T>();
            for (String _name : _names) {
                _list.add(getBean(_name, clazz));
            }
            _result = (T[]) _list.toArray();
        }
        return _result;
    }

    public static void setAppCtxt(ApplicationContext appCtxt) {
        SpringFactory.appCtxt = appCtxt;
    }
}

分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目源代码

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    JAVA上百实例源码以及开源项目

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    叮当书城项目-叮当书城项目部署代码视频教程带源码(java毕业设计项目-java练手项目)

    3、config文件,里面是我们的配置文件,jdbc.properties是对数据库连接的配置,mybatis-config.xml是对mapper.xml文件进行扫描的配置, spring.xml主要是配置组件扫描器,加载外部的properties配置文件,配置数据库...

    JAVA Spring框架实现登陆查询 完整搭建框架方法的word文档 包含mysql文件

    3 导入配置文件,将如下配置文件导入到src下面 3.1 修改generatorConfig.xml文件,这个是mybatis的逆向工程,修改数据库名,用户名,密码,对应的包名,对应的项目。如图 3.2 修改jdbc.properits文件, 3.3 log...

    使用MyEclipse创建Spring Boot项目demo

    3)配置加载配置文件的读取,开启注解 4)配置日志文件 … n) 配置完成之后部署 tomcat 调试 可能你还需要考虑各个版本的兼容性,jar 包冲突的各种可行性。 那么使用 Spring Boot 之后我们需要开发一个 web ...

    java开源包8

    [ini4j] 是一个简单的Java类库,用来读写Windows的ini配置文件。同时还包含一个 Java Perferences API 的实现。 拒绝服务测试工具 Port Groper PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的...

    java开源包10

    [ini4j] 是一个简单的Java类库,用来读写Windows的ini配置文件。同时还包含一个 Java Perferences API 的实现。 拒绝服务测试工具 Port Groper PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的...

    Spring中文帮助文档

    6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 7.2.3. AspectJ切入点表达式 7.2.4. 便利的切入...

    Spring.net框架

    从中我们可以看出,我们实现了一个IocInCSharp.ConfigHandler类,用来处理配置文件中IocInCSharp\ objects结点中的内容。ConfigHandler类将根据该结点下的内容处理并创建一ConfigInfo对象(关于ConfigInfo、 ...

    Spring高级之注解驱动开发视频教程

    n 高级特性-自定义PropertySourceFactory实现解析yaml配置文件 n 源码分析-BeanFactory类视图和常用工厂说明 n 源码分析-AnnotationConfigApplicationContext的register方法 n 源码分析-...

    17. 可视化大屏配置之代码整理

    可视化大屏配置专栏的完整代码,包含Echarts代码,Spring Boot代码,前后端交互代码,SQL代码。独立设计的大屏,运行在Spring Boot Application上的完整代码。其中包含了静态数据,定制,中国地图定制,静态数据定制...

    java开源包11

    [ini4j] 是一个简单的Java类库,用来读写Windows的ini配置文件。同时还包含一个 Java Perferences API 的实现。 拒绝服务测试工具 Port Groper PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的...

    java开源包6

    [ini4j] 是一个简单的Java类库,用来读写Windows的ini配置文件。同时还包含一个 Java Perferences API 的实现。 拒绝服务测试工具 Port Groper PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的...

    java开源包4

    [ini4j] 是一个简单的Java类库,用来读写Windows的ini配置文件。同时还包含一个 Java Perferences API 的实现。 拒绝服务测试工具 Port Groper PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的...

    java开源包9

    [ini4j] 是一个简单的Java类库,用来读写Windows的ini配置文件。同时还包含一个 Java Perferences API 的实现。 拒绝服务测试工具 Port Groper PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的...

    java开源包101

    [ini4j] 是一个简单的Java类库,用来读写Windows的ini配置文件。同时还包含一个 Java Perferences API 的实现。 拒绝服务测试工具 Port Groper PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的...

    java开源包5

    [ini4j] 是一个简单的Java类库,用来读写Windows的ini配置文件。同时还包含一个 Java Perferences API 的实现。 拒绝服务测试工具 Port Groper PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的...

    Spring攻略(第二版 中文高清版).part1

    1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 工作原理 14 1.4 解决构造程序歧义 17 ...

    java开源包1

    [ini4j] 是一个简单的Java类库,用来读写Windows的ini配置文件。同时还包含一个 Java Perferences API 的实现。 拒绝服务测试工具 Port Groper PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的...

Global site tag (gtag.js) - Google Analytics