Environment 的使用
date: 2019-06-21 11:35
status: draft
title: ‘Environment 的使用’
Environment 的使用有两种方式
- 一种是通过@Autowired 的形式进行自动注入
- 另一种是通过实现 EnvironmentAware 接口的方式进行实现
- 通过@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 的使用相关推荐
- 2020-09-15 JAVA面试题整理
文章目录 一.Java基础系列面试题 二 Java 面试题(二) 四.Redis面试题 四.Redis面试题 七.Spring Boot 面试题 九.微服务 面试题 十一.RabbitMQ 面试题 十 ...
- Android Environment 的作用以及常用的方法
从源码中可以看到这样一句话 Provides access to environment variables Environment的作用是: 提供对环境变量的访问 常见的方法 //外部存储设备的当 ...
- Pycharm报错合集:在pycharm运行anaconda配置的Pytorch环境报错(Environment location diretory is not empty )
第一次安装完pycharm后配置的解释器是Anaconda/envs下的python解释器. 发现但是要使用到pytorch(想直接使用Anaconda中创造的虚拟环境pytorch),所以就重新 ...
- UE4风格化场景设计入门指南 Stylized Station – The Environment Artist’s Survival Kit
持续时间13h 1920X1080 .ts 包含项目文件 大小解压后:4.9G 语言:英语+中文字幕(人工校对) 标题:风格化的车站--环境艺术家的生存工具包 信息: 环境艺术很难. 尤其是作为初学者 ...
- Blender创建三维教室场景学习教程 3D Classroom Environment Creation in Blender
流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.73 GB 含课程文件 |时长:4h ...
- ue4商城素材 Cyberpunk City / Recife Environment 赛博朋克城市场景
ue4商城素材 Cyberpunk City / Recife Environment 赛博朋克城市场景 ue4商城素材 Cyberpunk City / Recife Environment 赛博朋 ...
- Revit:概念建模环境技能学习 Revit: Conceptual Modeling Environment
Revit:概念建模环境技能学习 Revit: Conceptual Modeling Environment MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch ...
- TEE(Trusted Execution Environment)简介
TEE(Trusted Execution Environment),可信执行环境,该环境可以保证不被常规操作系统干扰的计算,因此称为"可信".这是通过创建一个可以在TrustZo ...
- 解决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 ...
- iOS SwiftUI篇-4 注解@State、@Binding、@ObservedObject、@EnvironmentObject、@Environment
iOS SwiftUI篇-4 注解@State.@Binding.@ObservedObject.@EnvironmentObject.@Environment @State 关联View的状态,当@ ...
最新文章
- 610D - Vika and Segments(线段树+扫描线+离散化)
- C#调用非托管C++DLL:通过托管C++DLL间接调用
- linux系统的日常管理2
- 网站后台的lnmp启动与重启
- C语言可变参数只会用算啥本事?看我来抽丝剥茧干翻它!
- 【Jmeter篇】jmeter+Ant+Jenkins实现自动化测试集成(一)
- C# Weifenluo教程
- S3C2440 进行微秒级、毫秒级延时函数
- 第一百天 how can i 坚持
- 【数据分析学习】016-numpy数据结构
- 阿里数据中台核心产品揭秘
- RTKLIB之RTCM解析
- 手动搭建 ReactJS 项目
- 深入理解Linux网路技术内幕学习笔记第四章:通知链
- Appium-Get Orientation(获取定位)
- 局域网中的每台计算机主机扩展槽,计算机导论选择题
- Idea中文件图标发生变化,导致文件显示出现异常
- css flew 布局 解决父元素高度不固定,子级居中。
- android8 小米5s,终于来了!小米5s、小米5s Plus将提前升级Android 8.0!
- 2017年电气报价软件排名!评分最高的是它
热门文章
- 开源crm系统VtigerCRM 7.3 保姆级安装教程
- c语言int【】=(123456789) 元素a【】的值,算法-用C语言实现
- 【找规律】求123456789的第几个全排列
- html中bottom的属性,css中bottom是什么意思?
- Unity优化——模型合并
- linux中命令tat,文件管理类命令(ls,tat,glob,cp,touch等)
- 第20届上海大学程序设计联赛春季赛(同步赛)
- 2022年,渲染农场都怎么收费,比较便宜的渲染农场测评
- 推荐个php在线手册,非常的全
- ENVI哨兵一号数据处理