抽象环境的概念
在介绍Spring核心模块为运行环境管理提供的功能之前,咱们先得解释清楚“运行环境”是什么。
码砖早年,对上下文(Context)、环境(Environment)一直都是傻傻分不清楚,感觉2者都是放了一堆参数在里面,貌似并没有多大区别。后来才慢慢摸清楚这2个词的套路。上下文(Context)是用来处理分层传递的,不清楚的可以看看上下文与IoC一文关于ApplicationContext的介绍。
而环境(Environment)是指当前运行程序之外的各种“全局变量”,这些变量反映了当前软件运行的各种外部情况。例如我们执行System.getenv()方法,就会获取到当前包括操作系统、全局路径配置、磁盘、jdk版本等等信息。这些信息实际上与当前运行的程序是无关的——无论你是否启动JVM,这些环境变量都是客观存在的。
既然环境的作用是体现当前运行的各种外部情况,那么除了JVM启动时提供的固定参数,也可以指定我们需要的环境变量。例如我们最常见的环境——开发环境、测试环境、集成QA环境、仿真环境、生产环境等。
Profile特性
对于软件开发而言经常要控制的就是当前程序是在开发环境运行还是在生产环境运行。除了后面要介绍的Spring Profile功能,还有各种各样的方法来进行控制,比如Maven的profile标签。Spring Profile只是一种环境控制的参考手段,他的好处是可以在代码级别去控制,具体使用什么根据项目的需要去考量。
Spring的Profile特性使用起来并不复杂,而且同时支持Java注解和XML配置。我们通过几段代码来说明如何使用Profile。
纯Java常规使用
(以下案例的可执行代码请到gitee下载,)
定义一个servuce接口和三个service的实现类:
package chkui.springcore.example.hybrid.profile.service;
public interface Blizzard {
String getName();
}
package chkui.springcore.example.hybrid.profile.service.blizzard;
class Warcraft implements Blizzard {
pub