`

加载项目中所有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;
    }
}

分享到:
评论

相关推荐

    如何加载jar包中的spring配置文件

    在Spring MVC项目中,加载jar包中的Spring配置文件是一个常见的需求,特别是在进行SSM(Spring、Spring MVC、MyBatis)整合时。SSM框架的整合通常涉及到多个配置文件的组织和管理,其中一部分配置可能会被打包到独立...

    Spring动态加载配置文件

    接下来,一旦检测到Spring配置文件发生变化,我们需要重新加载配置文件。这可以通过Spring的`ApplicationContext`的`refresh()`方法来实现。`refresh()`会重新初始化Bean工厂,读取新的配置信息,并更新所有Bean的...

    加载jar包中的spring配置文件

    综上所述,"加载jar包中的spring配置文件"是一个关键的Java开发实践,它涉及到Spring框架的配置管理、类路径的概念,以及如何在多模块项目中有效地组织和使用配置。正确理解和使用这些技术,能帮助开发者构建可扩展...

    spring配置文件加密实现

    在Java中,我们可以利用开源项目如EncFS或TrueCrypt来实现TE网络。这些工具能够创建一个虚拟文件系统,其中的文件在存储时自动加密,在读取时自动解密,对应用程序透明。 为了集成TE网络到Spring应用中,我们需要在...

    Spring中使用classpath加载配置文件浅析

    Spring框架提供了灵活的方式来加载位于classpath中的XML配置文件,这对于项目的模块化和可维护性至关重要。本文将详细分析Spring通过classpath加载配置文件的不同情形,并提供解决加载过程中可能遇到的问题的方法。 ...

    spring加载多个配置文件

    在Spring框架中,加载多个配置文件是常见的需求,特别是在大型项目中,为了保持代码的整洁和模块化,通常会将不同的配置分散到多个文件中。本文将深入探讨如何在Spring中实现这一功能。 首先,Spring提供了多种方式...

    Spring中如何加载多个配置文件.pdf

    本文将详细介绍Spring框架中如何加载多个配置文件的不同方式,并提供具体的示例代码。 #### 一、使用数组方式加载多个配置文件 第一种方式是通过定义一个包含所有配置文件名的数组来加载多个配置文件。这种方式...

    Spring 加载多个配置文件

    在 Spring 框架中,通过合理地拆分和加载多个配置文件,不仅可以显著提升应用程序的可读性和可维护性,还能更好地适应大型项目的团队协作模式。掌握这些技巧,将帮助开发者构建更加健壮、灵活的企业级应用。

    大型项目的struts,spring配置文件

    在大型项目中,Struts和Spring的配置文件是系统的核心,它们定义了各个组件如何协同工作。下面将详细讲解这两个框架的主要配置元素和它们在大型项目中的应用。 首先,Struts的配置文件通常命名为`struts-config.xml...

    Spring配置文件集合

    Spring框架是Java开发中广泛应用的轻量级框架,它的...Spring的这些配置文件使得我们可以模块化、解耦合地管理应用组件,提高了代码的可维护性和复用性。理解并熟练运用这些配置,是成为专业Java开发人员的必备技能。

    Spring Boot多模块配置文件读取

    - Spring Boot提供了`@ConfigurationProperties`注解,可以将配置文件中的键值对映射到Java对象的属性上,增强代码的可读性。 - 创建一个类,用`@Component`或`@Configuration`注解,并使用`@...

    java读取配置文件源代码

    这个简单的例子展示了如何在Java中读取配置文件的基本步骤。实际应用中,可能还需要处理异常,验证属性值,或者在找不到配置文件时提供默认值。此外,现代Java项目倾向于使用更高级的配置管理框架,如Apache Commons...

    spring配置文件模板

    本文将深入探讨Spring配置文件`applicationContext.xml`中的关键知识点。 首先,我们来理解`applicationContext.xml`的结构和作用。这个文件是Spring IoC容器的基础,它定义了一系列Bean的定义,这些Bean就是Spring...

    让spring加载自己的properties配置文件,在代码中获得配置信息

    本文将详细介绍如何让Spring自动加载自定义的`.properties`配置文件,并在代码中获取这些配置信息。 首先,我们需要创建一个`.properties`文件。这个文件通常命名为`application.properties`或根据项目需求自定义,...

    Spring3.0 配置文件中加载Properties文件的小例子

    本篇将详细讲解如何在Spring 3.0的配置文件中加载Properties文件,以便在运行时动态获取和使用这些配置。 首先,我们需要一个Properties文件,例如`application.properties`,它通常放在项目的类路径根目录下。这个...

    spring读取jar中的配置文件

    在Java开发中,Spring框架是应用最广泛的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器。...在实际开发中,应根据项目需求选择合适的方式,确保配置文件能被正确地加载和解析。

    spring配置文件详细介绍

    在Spring配置文件中,最重要的元素是`&lt;bean&gt;`。`&lt;bean&gt;`元素定义了一个Spring管理的对象,也称为bean。它包含几个关键属性,如`id`(唯一标识符)、`class`(类路径,用于实例化对象)和`name`(可选的别名)。例如...

    Java 加载配置文件的方式

    在Java编程中,加载配置文件是一项常见的任务,它允许我们动态地设置应用的参数和环境,而无需修改代码。配置文件通常以.properties或.xml格式存储,包含键值对或者结构化数据,使得程序可以根据不同环境或者用户...

    springboot+java类热加载

    在Java中,类加载器负责查找并加载类到Java虚拟机中。我们可以通过自定义类加载器来实现热加载。例如,`MemoryClassLoader.java`可能就是一个自定义类加载器的实现,它可以在内存中动态加载或更新类。 **JarinJAR**...

    spring读取配置文件

    本篇文章将深入探讨如何在Spring中读取不同目录下的配置文件,以及使用`ClassPathXmlApplicationContext`和`FileSystemXmlApplicationContext`这两种不同的上下文环境来加载它们。 首先,让我们了解`...

Global site tag (gtag.js) - Google Analytics