概述
Environment
是Spring
核心框架中定义的一个接口,用来表示整个应用运行时的环境。
因为Spring
中充斥了各种抽象的接口,所以简单地说Environment
是一个接口可能并不会让你觉得Environment
是做什么的,有多么重要。所以为了更形象地理解Environment
,你也可以把Spring应用的运行时简单地想象成这样两个部分:一个是Spring
应用本身,一个是Spring
应用所处的环境,而Environment
这个接口,就是对这个所处的环境的概念性建模。
这个接口对应用程序运行环境的两个关键方面进行了建模 :
profile
- 一个
profile
是一组Bean
定义(Bean definition
)的逻辑分组(logical group
)。 - 这个分组,也就是这个
profile
,被赋予一个命名,就是这个profile
的名字。 - 只有当一个
profile
处于active
状态时,它对应的逻辑上组织在一起的这些Bean
定义才会被注册到容器中。 Bean
添加到profile
可以通过XML
定义方式或者注解方式。Environment
对于profile
机制所扮演的角色是用来指定哪些profile
是当前活跃的/缺省活跃的。
- 一个
property
属性- 一个应用的属性有很多来源: 属性文件(
properties files
),JVM系统属性,系统环境变量,JNDI
,servlet
上下文参数,临时属性对象等。 Environment
对于property
所扮演的角色是提供给使用者一个方便的服务接口用于- 配置属性源
- 从属性源中获取属性
- 一个应用的属性有很多来源: 属性文件(
容器(ApplicationContext
)所管理的bean
如果想直接使用Environment
对象访问profile
状态或者获取属性,可以有两种方式
- 实现
EnvironmentAware
接口 @Inject
或者@Autowired
注入一个Environment
对象
绝大多数情况下,bean都不需要直接访问Environment
对象,而是通过类似@Value
注解的方式把属性值注入进来。
这个接口定义在包 org.springframework.core.env
中。下面是Spring
围绕环境抽象Environment
各个接口/类之间的继承关系:
接口/类 | 介绍 |
---|---|
PropertyResolver | 接口,抽象对属性源的访问,比如是否包含某个属性,读取属性,解析占位符,将读取到的属性转换成指定类型 |
Environment | 接口,继承自PropertyResolver ,对环境属性访问和default/active profile 访问的抽象因为继承自 PropertyResolver ,所以它自然具备PropertyResolver 提供的所有能力,对环境属性的访问也正是通过PropertyResolver 定义的这些能力 |
ConfigurablePropertyResolver | 接口,为PropertyResolver 接口抽象的属性源访问做了配置方面的增强。比如设置将属性值转换工具,指定占位符前缀后缀,遇到不可解析的嵌套的占位符怎么办等等 |
ConfigurableEnvironment | 接口,在所继承的接口之上增加了设置defaut/active profile 的能力,增加/删除环境对象中属性源的能力 |
ConfigurableWebEnvironment | 接口,向接口ConfigurableEnvironment 增强了根据Servlet上下文/配置初始化属性源的能力 |
AbstractEnvironment | Environment 抽象基类,实现了ConfigurableEnvironment |
StandardEnvironment | 实现类,针对标准Spring应用(非Web应用)环境, 在 AbstractEnvironment 基础上提供了属性源systemEnvironment (来自System.getenv() )和systemProperties (来自System.getProperties() ) |
StandardServletEnvironment | 实现类,针对标准Spring Servlet Web应用的环境, 在 StandardEnvironment 的基础上增加了servletContextInitParams /servletConfigInitParams /jndiProperties 三个属性源 |
官方文档
最后
以上就是生动小白菜为你收集整理的Spring 环境抽象 Environment的全部内容,希望文章能够帮你解决Spring 环境抽象 Environment所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复