/* * Copyright 2008-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.hasor.core; import java.util.Set; /** * 环境支持 * * 环境变量来源以及加载顺序,靠后顺位会覆盖前一顺位的重复配置。 * <li>1st,配置文件"hasor.environmentVar"</li> * <li>2st,"Hasor.put*"的配置</li> * <li>3st,属性文件"env.config"</li> * <li>4st,System.getProperties()</li> * <li>5st,System.getenv()</li> * * 属性文件可以存在下面两个位置:1.%WORK_HOME% 下、2.classpath路径。 WORK_HOME优先classpath。 * @version : 2013-6-19 * @author 赵永春 (zyc@hasor.net) */ public interface Environment { public static final String EVN_FILE_NAME = "env.config"; /** @return 获取扫描路径*/ public String[] getSpanPackage(); /** @return 获取配置的工作模式。*/ public String getWorkMode(); /**在框架扫描包的范围内查找具有特征类集合。(特征可以是继承的类、标记的注解)*/ public Set<Class<?>> findClass(Class<?> featureType); /** * 在框架扫描包的范围内查找具有特征类集合(特征可以是继承的类、标记的注解)。<br> * -- 该方法会放弃在匹配的过程中如果类无法被ClassLoader所加载的类。 * * @param featureType 特征类型 * @param loadPackages 扫面范围,单个包 * @return 返回匹配的类集合。 */ public Set<Class<?>> findClass(Class<?> featureType, String loadPackages); /** * 在框架扫描包的范围内查找具有特征类集合(特征可以是继承的类、标记的注解)。<br> * -- 该方法会放弃在匹配的过程中如果类无法被ClassLoader所加载的类。 * * @param featureType 特征类型 * @param loadPackages 扫面范围,多个包 * @return 返回匹配的类集合。 */ public Set<Class<?>> findClass(Class<?> featureType, String[] loadPackages); /** @return 获取上下文*/ public Object getContext(); /**获取当创建Bean时使用的{@link ClassLoader}*/ public ClassLoader getClassLoader(); /** @return 事件上下文*/ public EventContext getEventContext(); // /**插件目录*/ public String getPluginDir(Class<?> pluginType); /**工作目录*/ public String getWorkSpaceDir(); // /*-----------------------------------------------------------------------------------Settings*/ /** @return 获取应用程序配置。*/ public Settings getSettings(); // /*----------------------------------------------------------------------------------------Env*/ /**获取工作模式,工作路径的配置可以在config.xml的“<b>environmentVar.WORK_MODE</b>”节点上配置。*/ public static final String WORK_MODE = "WORK_MODE"; /**获取工作目录,工作路径的配置可以在config.xml的“<b>environmentVar.WORK_HOME</b>”节点上配置。*/ public static final String WORK_HOME = "WORK_HOME"; /**获取临时文件存放目录,工作路径的配置可以在config.xml的“<b>environmentVar.HASOR_TEMP_PATH</b>”节点上配置。*/ public static final String HASOR_TEMP_PATH = "HASOR_TEMP_PATH"; /**获取工作空间中专门用于存放日志的目录空间,配置可以在config.xml的“<b>environmentVar.HASOR_LOG_PATH</b>”节点上配置。*/ public static final String HASOR_LOG_PATH = "HASOR_LOG_PATH"; /**获取工作空间中专门用于存放模块配置信息的目录空间,配置可以在config.xml的“<b>environmentVar.HASOR_PLUGIN_PATH</b>”节点上配置。*/ public static final String HASOR_PLUGIN_PATH = "HASOR_PLUGIN_PATH"; /**获取工作空间中专门用于存放模块配置信息的目录空间,配置可以在config.xml的“<b>environmentVar.HASOR_PLUGIN_SETTINGS</b>”节点上配置。*/ public static final String HASOR_PLUGIN_SETTINGS = "HASOR_PLUGIN_SETTINGS"; // /** * 计算字符串,将字符串中定义的环境变量替换为环境变量值。环境变量名不区分大小写。<br> * <font color="ff0000"><b>注意</b></font>:只有被百分号包裹起来的部分才被解析成为环境变量名, * 如果无法解析某个环境变量平台会抛出一条警告,并且将环境变量名连同百分号作为环境变量值一起返回。<br> * <font color="00aa00"><b>例如</b></font>:环境中定义了变量Hasor_Home=C:/hasor、Java_Home=c:/app/java,下面的解析结果为 * <div>%hasor_home%/tempDir/uploadfile.tmp  -->  C:/hasor/tempDir/uploadfile.tmp</div> * <div>%JAVA_HOME%/bin/javac.exe  -->  c:/app/java/bin/javac.exe</div> * <div>%work_home%/data/range.png  -->  %work_home%/data/range.png;并伴随一条警告</div> * @param eval 环境变量表达式。 * @return 返回环境变量表达式计算结果。 */ public String evalString(String eval); /** * 添加环境变量,添加的环境变量并不会影响到系统环境变量,它会使用内部Map保存环境变量从而避免影响JVM正常运行。 * @param varName 环境变量名。 * @param value 环境变量值或环境变量表达式。 */ public void addEnvVar(String varName, String value); /** * 删除环境变量,该方法从内部Map删除所保存的环境变量,这样做的目的是为了避免影响JVM正常运行。 * @param varName 环境变量名。 */ public void removeEnvVar(String varName); /**刷新加载的环境变量*/ public void refreshVariables(); /**获取系统属性。*/ public String getSystemProperty(String property); }