zoukankan      html  css  js  c++  java
  • springboot2 随时随地获取applicationContext,以及优先加载某些bean

    关于获取applicationContext

    主要就是:

    (1)新建个类,实现ApplicationContextAware接口

    接口只需重写下面这个方法,参数中就有我们要的context,保存到静态变量就行

    1.  
      public static ApplicationContext applicationContext;
    2.  
       
    3.  
      @Override
    4.  
      public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    5.  
      System.out.println("开始保存到静态变量");
    6.  
      ApplicationContextUtil.applicationContext = applicationContext;
    7.  
      }

    (2)加上@Component注解,让spring来生成对象(加载bean)

    spring会在bean加载后,自动调用setApplicationContext方法,入参也会自动填好。

    (3)后续使用静态变量就好了

    其实这有个前提:加载bean后,才能使用静态变量。

    有例外吗?有,还很常见。就是在其他bean的构造函数和初始化方法中,使用这个静态变量。

    会怎么样?空指针异常。

    来看看空指针

    解决方法很简单,让工具类bean先加载就好。

    https://blog.csdn.net/liuyueyi25/article/details/104970404

    大概就是:

    (1)新建个类(Bean生命周期控制),实现BeanFactoryAware和InstantiationAwareBeanPostProcessor接口。同时加上@Component注解,让spring来生成对象。

    -- 因为实现了InstantiationAwareBeanPostProcessor接口,所以通过@Component让spring加载bean时,会最先加载。

    (2)在重写的方法里,主动通过 beanFactory.getBean() 这个方法获取工具类bean(获取bean 会确保执行过 加载bean)。这时候其他bean还没加载呢,那就算是优先加载了。

    -- 可以在 setBeanFactory 里写

    -- 也可以在 postProcessAfterInstantiation 里写

    @DependsOn和@Autowired二选一

    用来建立bean依赖,连锁加载bean

    最后看看效果

    代码 springboot2、maven项目

  • 相关阅读:
    tf-idf sklearn
    特征工程——特征预处理
    dict 字典
    特征预处理——特征表达
    特征工程之特征选择
    机器学习技巧学习
    dataframe去重 drop_duplicates
    dataframe 转为list
    XGboost
    StratifiedShuffleSplit()函数 实现对数据集的划分
  • 原文地址:https://www.cnblogs.com/ryyy/p/14228069.html
Copyright © 2011-2022 走看看