date: 2019-06-21 11:35
status: draft
title: ‘Environment 的使用’

Environment 的使用有两种方式

  • 一种是通过@Autowired 的形式进行自动注入
  • 另一种是通过实现 EnvironmentAware 接口的方式进行实现
  1. 通过@Autowired 的形式进行注入
    官方网站的样例
package org.exam.config;
import org.exam.service.TestBeanFactoryPostProcessor;
import org.exam.service.UserServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import javax.annotation.Resource;
@Configuration
@ComponentScan(basePackages = {"org.exam.service"})
@PropertySource("classpath:config.properties")
public class AppConfigOld {@Resourceprivate Environment env;@Beanpublic UserServiceImpl userService(){System.out.println(env);return new UserServiceImpl();}/*未加入这个BeanFactoryPostProcessor一切都很正常,一旦加入这个@Bean,env就变为null@Beanpublic TestBeanFactoryPostProcessor testBeanFactoryPostProcessor(){System.out.println(env);return new TestBeanFactoryPostProcessor();}*/
}

产生这种现象的原因,根据测试的方式可以确定,在Spring整合mybatis的时候,BeanFactoryPostProcessor 这个bean比较早的被创建,这个时候的private Environment evn 还没有被赋值,而这个bean 有没有表明要依赖 evn 而创建,那么就传进一个null 变量,
首先,我想想到的是通过构造器或者set方法注入,但是这种想法被打断了,因为这个bean还会再注入,比较乱没有调通。
没有办法了,换成EnvironmentAware 接口的形式,调通了。
2. 通过实现EnvironmentAware 接口的形式实现

package org.exam.config;
import org.exam.service.TestBeanFactoryPostProcessor;
import org.exam.service.UserServiceImpl;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
@Configuration
@ComponentScan(basePackages = {"org.exam.service"})
@PropertySource("classpath:config.properties")
public class AppConfig implements EnvironmentAware {private Environment env;@Overridepublic void setEnvironment(Environment environment) {this.env=environment;}@Beanpublic UserServiceImpl userService(){System.out.println(env);return new UserServiceImpl();}@Beanpublic TestBeanFactoryPostProcessor testBeanFactoryPostProcessor(){System.out.println(env);return new TestBeanFactoryPostProcessor();}
}

这种方式就避免了建立一个Environment 的ApplicationContext的方式,个人不推荐将其设置为ApplicationContext。

Environment 的使用相关推荐

  1. 2020-09-15 JAVA面试题整理

    文章目录 一.Java基础系列面试题 二 Java 面试题(二) 四.Redis面试题 四.Redis面试题 七.Spring Boot 面试题 九.微服务 面试题 十一.RabbitMQ 面试题 十 ...

  2. Android Environment 的作用以及常用的方法

    从源码中可以看到这样一句话 Provides access to environment variables Environment的作用是:  提供对环境变量的访问 常见的方法 //外部存储设备的当 ...

  3. Pycharm报错合集:在pycharm运行anaconda配置的Pytorch环境报错(Environment location diretory is not empty )

    第一次安装完pycharm后配置的解释器是Anaconda/envs下的python解释器.   发现但是要使用到pytorch(想直接使用Anaconda中创造的虚拟环境pytorch),所以就重新 ...

  4. UE4风格化场景设计入门指南 Stylized Station – The Environment Artist’s Survival Kit

    持续时间13h 1920X1080 .ts 包含项目文件 大小解压后:4.9G 语言:英语+中文字幕(人工校对) 标题:风格化的车站--环境艺术家的生存工具包 信息: 环境艺术很难. 尤其是作为初学者 ...

  5. Blender创建三维教室场景学习教程 3D Classroom Environment Creation in Blender

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.73 GB 含课程文件 |时长:4h ...

  6. ue4商城素材 Cyberpunk City / Recife Environment 赛博朋克城市场景

    ue4商城素材 Cyberpunk City / Recife Environment 赛博朋克城市场景 ue4商城素材 Cyberpunk City / Recife Environment 赛博朋 ...

  7. Revit:概念建模环境技能学习 Revit: Conceptual Modeling Environment

    Revit:概念建模环境技能学习 Revit: Conceptual Modeling Environment MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch  ...

  8. TEE(Trusted Execution Environment)简介

    TEE(Trusted Execution Environment),可信执行环境,该环境可以保证不被常规操作系统干扰的计算,因此称为"可信".这是通过创建一个可以在TrustZo ...

  9. 解决Neither the JAVA_HOME nor the JRE_HOME environment variable is defined问题

    问题描述: 在cmd窗口使用 startup 命令启动Tomcat时,出现 Neither the JAVA_HOME nor the JRE_HOME environment variable is ...

  10. iOS SwiftUI篇-4 注解@State、@Binding、@ObservedObject、@EnvironmentObject、@Environment

    iOS SwiftUI篇-4 注解@State.@Binding.@ObservedObject.@EnvironmentObject.@Environment @State 关联View的状态,当@ ...

最新文章

  1. 610D - Vika and Segments(线段树+扫描线+离散化)
  2. C#调用非托管C++DLL:通过托管C++DLL间接调用
  3. linux系统的日常管理2
  4. 网站后台的lnmp启动与重启
  5. C语言可变参数只会用算啥本事?看我来抽丝剥茧干翻它!
  6. 【Jmeter篇】jmeter+Ant+Jenkins实现自动化测试集成(一)
  7. C# Weifenluo教程
  8. S3C2440 进行微秒级、毫秒级延时函数
  9. 第一百天 how can i 坚持
  10. 【数据分析学习】016-numpy数据结构
  11. 阿里数据中台核心产品揭秘
  12. RTKLIB之RTCM解析
  13. 手动搭建 ReactJS 项目
  14. 深入理解Linux网路技术内幕学习笔记第四章:通知链
  15. Appium-Get Orientation(获取定位)
  16. 局域网中的每台计算机主机扩展槽,计算机导论选择题
  17. Idea中文件图标发生变化,导致文件显示出现异常
  18. css flew 布局 解决父元素高度不固定,子级居中。
  19. android8 小米5s,终于来了!小米5s、小米5s Plus将提前升级Android 8.0!
  20. 2017年电气报价软件排名!评分最高的是它

热门文章

  1. 开源crm系统VtigerCRM 7.3 保姆级安装教程
  2. c语言int【】=(123456789) 元素a【】的值,算法-用C语言实现
  3. 【找规律】求123456789的第几个全排列
  4. html中bottom的属性,css中bottom是什么意思?
  5. Unity优化——模型合并
  6. linux中命令tat,文件管理类命令(ls,tat,glob,cp,touch等)
  7. 第20届上海大学程序设计联赛春季赛(同步赛)
  8. 2022年,渲染农场都怎么收费,比较便宜的渲染农场测评
  9. 推荐个php在线手册,非常的全
  10. ENVI哨兵一号数据处理