首页 > 其他分享 >SpringContextHolder工具類

SpringContextHolder工具類

时间:2023-07-21 16:35:03浏览次数:35  
标签:applicationContext ApplicationContext spring 加載 bean SpringContextHolder 工具

1.工具類用途?java

該工具類主要用於那些沒有納入spring框架管理的類卻要調用spring容器中的bean提供的工具類,在spring中要經過IOC依賴注入來取得對應的對象,可是該類經過實現ApplicationContextAware接口,以靜態變量保存Spring ApplicationContext, 可在任何代碼任何地方任什麼時候候中取出ApplicaitonContext.如此就不能說說org.springframework.context.ApplicationContextAware這個接口了spring


2.ApplicationContextAware接口做用?app

當一個類實現了這個接口(ApplicationContextAware)以後,這個類就能夠方便得到ApplicationContext中的全部bean。換句話說,就是這個類能夠直接獲取spring配置文件中,全部有引用到的bean對象。除了以上SpringContextHolder類以外,還有不須要屢次加載spring配置文件就能夠取得bean的類。框架


3.setApplicationContextAware( )什麼時候執行?ide

Spring容器會檢測容器中的全部Bean,若是發現某個Bean實現了ApplicationContextAware接口,Spring容器會在建立該Bean以後,自動調用該Bean的setApplicationContextAware()方法,調用該方法時,會將容器自己做爲參數傳給該方法——該方法中的實現部分將Spring傳入的參數(容器自己)賦給該類對象的applicationContext實例變量,所以接下來能夠經過該applicationContext實例變量來訪問容器自己。工具

/**
 * Spring的ApplicationContext的持有者,能夠用靜態方法的方式獲取spring容器中的bean
 *
 */
@Component
@Lazy(false)
public class SpringContextHolder implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringContextHolder.applicationContext = applicationContext;
    }

    public static ApplicationContext getApplicationContext() {
        assertApplicationContext();
        return applicationContext;
    }

    @SuppressWarnings("unchecked")
    public static <T> T getBean(String beanName) {
        assertApplicationContext();
        return (T) applicationContext.getBean(beanName);
    }

    public static <T> T getBean(Class<T> requiredType) {
        assertApplicationContext();
        return applicationContext.getBean(requiredType);
    }

    private static void assertApplicationContext() {
        if (SpringContextHolder.applicationContext == null) {
            throw new RuntimeException("applicaitonContext屬性爲null,請檢查是否注入了SpringContextHolder!");
        }
    }
}

修改配置文件spring-context.xml,添加bean:ui

<bean id="springContextHolder" class="com.utils.SpringContextHolder" lazy-init="false"/>

項目中的使用,例如UserRoleService.java:
private  UserService userService= SpringContextHolder.getBean(UserService.class);spa


注意:code

1.若是啓動項目後報錯 "applicaitonContext屬性爲null,請檢查是否注入了SpringContextHolder!",由於SpringContextHolder中的applicationContext爲空,猜想是SpringContextHolder這個bean沒有在UserRole這個bean加載前進行加載,致使沒有加載完成,因此咱們須要在配置文件中首先加載SpringContextHolder。把<bean id="springContextHolder" class="com.utils.SpringContextHolder" lazy-init="false"/>放在配置文件的第一個加載位置,再啓動項目發現正常。
2.在使用該類靜態方法時必須保證spring加載順序正確, 也能夠經過在使用類上添加 @DependsOn(「springContextHolder」),確保在此以前 SpringContextHolder 類已加載!
 xml

   

标签:applicationContext,ApplicationContext,spring,加載,bean,SpringContextHolder,工具
From: https://www.cnblogs.com/tiancai/p/17571778.html

相关文章

  • 【Dotnet 工具箱】推荐一个使用 C# 开发的轻量级压测工具
    你好,这里是Dotnet工具箱,定期分享Dotnet有趣,实用的工具和组件,希望对您有用!轻量级压测工具LoadTestToolbox是一个使用C#开发的轻量级压测工具,基于.NET6版本,和其他压测工具相比,LoadTestToolbox安装和使用都非常简单。LoadTestToolbox提供了一种可靠的方式来模拟高负......
  • Excel工具使用
    一、函数1、前言在Excel单元格中的函数名称都是大写字母,即使在输入函数时使用了小写字母,在按下Enter键后,Excel也会自动将函数名称转为大写字母,因此为了确保在公式中输入正确的函数名,我们可以在输入时使用小写字母,这样如果函数名称有误,那么在按下Enter键时Excel不会将小写字......
  • 网络性能测试工具iperf3
    1.创建两个容器#创建第一个容器dockerrun-d--namecontainer1ubuntu:latestsleepinfinity#创建第二个容器dockerrun-d--namecontainer2ubuntu:latestsleepinfinity2.查找第一个容器的ip地址dockerinspectcontainer13.进入第一个容器,并安装iperf3。......
  • 基准测试工具 --- BenchmarkDotNet
    介绍今天介绍一个非常强大的基于.Net的基准测试工具BenchmarkDotNet。BenchmarkDotNet已经被14300多个项目采用,包括非常多的知名开源项目,例如dotnet/performance(.Net所有运行时的基准测试项目)dotnet/runtime(.Net运行时库),Roslyn(c#和VisualBasic编译器),Mono、ASP.NET......
  • 基准测试工具 --- BenchmarkDotNet
    介绍今天介绍一个非常强大的基于.Net的基准测试工具BenchmarkDotNet。BenchmarkDotNet已经被14300多个项目采用,包括非常多的知名开源项目,例如dotnet/performance(.Net所有运行时的基准测试项目)dotnet/runtime(.Net运行时库),Roslyn(c#和VisualBasic编译器),Mono、ASP.NET......
  • python的可视化工具
    Python的可视化工具Python是一种强大的编程语言,拥有丰富的可视化工具,可以帮助开发者以更直观、美观的方式展示数据。在本文中,我们将介绍一些常用的Python可视化工具,并提供相应的代码示例。MatplotlibMatplotlib是Python中最常用的可视化库之一,它提供了各种绘图功能,包括线图、散......
  • 【Dotnet 工具箱】推荐一个使用 C# 开发的轻量级压测工具
    你好,这里是Dotnet工具箱,定期分享Dotnet有趣,实用的工具和组件,希望对您有用!轻量级压测工具LoadTestToolbox是一个使用C#开发的轻量级压测工具,基于.NET6版本,和其他压测工具相比,LoadTestToolbox安装和使用都非常简单。LoadTestToolbox提供了一种可靠的方式来模拟高负......
  • 苹果电脑热门清理软件横向评测,四大Mac清理工具下载安装教程
    Mac一般来说基本是不会中毒的,而且像现在的windows也是很少中毒,但我们可能还是需要一款杀毒清理软件,主要是为了清理垃圾,统一查看并管理软件开机自启、权限信息等,统一卸载清理等功能,另外我们可能还想要实时查看电脑当前的CPU、内存、GPU等状态下面推荐几款Mac上使用量都还不......
  • 工具 --- IL指令集解释
    引言汇总一下所有的.NETIL指令,以及它们的名称、操作码值、堆栈转换行为和描述。作为反编译IL代码时的查询字典。IL指令集列表以下内容来自微软官方文档,通过百度翻译API翻译为中文。指令英文描述中文描述AddAddstwovaluesandpushestheresultontotheev......
  • [GPT] 如何配置抓包工具以解密HTTPS流量才能看到明文的域名地址
     要配置抓包工具以解密HTTPS流量,您需要执行以下步骤: 1.安装抓包工具:首先,确保您已经安装了支持HTTPS解密的抓包工具,例如Wireshark。 2.获取SSL证书:抓包工具需要使用目标网站的SSL证书来解密HTTPS流量。您可以通过以下两种方式之一获取SSL证书:a.从目标网站获取......