首页 > 其他分享 >Springboot普通类获取运行时环境,获取运行时容器,获取Bean,等等获取运行时一切参数总结大全

Springboot普通类获取运行时环境,获取运行时容器,获取Bean,等等获取运行时一切参数总结大全

时间:2022-11-20 15:37:40浏览次数:49  
标签:ApplicationContext Springboot 接口 Environment 获取 bean org 运行


文章目录

  • ​​获取ApplicationContext​​
  • ​​ApplicationContext有什么用​​
  • ​​获取ApplicationContext​​
  • ​​使用ApplicationContext​​
  • ​​获取Environment​​
  • ​​Environment有什么用​​
  • ​​获取Environment​​
  • ​​使用Environment​​

获取ApplicationContext

ApplicationContext有什么用

ApplicationContext为应用程序提供配置的中央接口。在应用程序运行时,这是只读的,但如果实现支持这一点,则可以重新加载。所以,因为获取到的ApplicationContext是不可变的,通常定义一个工具类,将其封装好直接拿来用即可。

ApplicationContext提供:

  • 用于访问应用程序组件的Bean工厂方法。继承自ListableBeanFactory。
  • 以通用方式加载文件资源的能力。继承自org.springframe .core.io. resourceloader接口。
  • 向注册的侦听器发布事件的能力。继承自ApplicationEventPublisher接口。
  • 解析消息的能力,支持国际化。从MessageSource接口继承。
  • 从父上下文继承。后代上下文中的定义总是具有优先级。这意味着,例如,单个父上下文可以被整个web应用程序使用,而每个servlet都有自己的子上下文,子上下文独立于任何其他servlet的子上下文。
  • 除了标准的生命周期功能外,ApplicationContext实现检测并调用applicationcontextware bean以及ResourceLoaderAware、ApplicationEventPublisherAware和MessageSourceAware bean。

获取ApplicationContext

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

// 注意!这个@Component是一定要加的
@Component
public class ApplicationContextUtils implements ApplicationContextAware {

private static ApplicationContext applicationContext;

/**
* 实现ApplicationContextAware的setApplicationContext方法,获取到ApplicationContext
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}

/**
* 取得存储在静态变量中的ApplicationContext.
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
}

此时我们可以在普通类中直接ApplicationContextUtils.getApplicationContext(),就可以获取ApplicationContext了,不需要额外注入这个ApplicationContextUtils。

或者每个需要使用ApplicationContext 的类,各自实现ApplicationContextAware接口,拿到ApplicationContext也是可以的。

使用ApplicationContext

ApplicationContext有很多方法,常用的就是获取bean了:

Springboot普通类获取运行时环境,获取运行时容器,获取Bean,等等获取运行时一切参数总结大全_加载


Springboot普通类获取运行时环境,获取运行时容器,获取Bean,等等获取运行时一切参数总结大全_spring_02

获取Environment

某个bean,实现EnvironmentAware接口,就可以得到运行的环境了。

Environment有什么用

Environment接口,表示当前应用程序运行的环境。建模应用程序环境的两个关键方面:概要文件和属性。与属性访问相关的方法通过PropertyResolver超接口公开。

概要文件是一个命名的、逻辑的bean定义组,仅当给定的概要文件是活动的时才向容器注册。可以将bean分配给配置文件,无论是在XML中定义的还是通过注释定义的。与概要文件相关的Environment对象的作用是确定哪些概要文件(如果有的话)当前是活动的,以及哪些概要文件(如果有的话)在默认情况下应该是活动的。

属性在几乎所有应用程序中都扮演着重要的角色,并且可能来自各种来源:属性文件、JVM系统属性、系统环境变量、JNDI、servlet上下文参数、特别的Properties对象、映射等等。与属性相关的环境对象的作用是为用户提供一个方便的服务接口,用于配置属性源并从中解析属性。

在ApplicationContext中管理的bean可以注册为EnvironmentAware或@Inject the Environment,以便查询概要文件状态或直接解析属性。

然而,在大多数情况下,应用程序级bean不应该需要与环境直接交互,而是可能必须具有${…}属性值被属性占位符配置器替换,例如PropertySourcesPlaceholderConfigurer,它本身是EnvironmentAware的,并且从Spring 3.1开始在使用 时默认注册。

环境对象的配置必须通过ConfigurableEnvironment接口完成,该接口从所有AbstractApplicationContext子类getEnvironment()方法返回。

获取Environment

import org.springframework.context.EnvironmentAware;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

// 一定要加@Component
@Component
public class EnvironmentUtils implements EnvironmentAware {

private static Environment environment;


/**
* 实现EnvironmentAware的setEnvironment方法,可以使bean获取到运行时的环境
*/
@Override
public void setEnvironment(Environment environment) {
this.environment = environment;
}

/**
* 取得存储在静态变量中的Environment
*/
public static Environment getEnvironment() {
return environment;
}

}

使用Environment

Environment有很多方法,常用的就是获取配置信息了。

Springboot普通类获取运行时环境,获取运行时容器,获取Bean,等等获取运行时一切参数总结大全_java_03


标签:ApplicationContext,Springboot,接口,Environment,获取,bean,org,运行
From: https://blog.51cto.com/u_13540373/5871511

相关文章