• ApplicationContext注入Bean(多线程中注入Bean)


    前言

    通常我们用一下几种方式注入 :

    1、@Autowired 是通过 byType 的方式去注入的, 使用该注解,要求接口只能有一个实现类。
    2、@Resource 可以通过 byName 和 byType的方式注入, 默认先按 byName的方式进行匹配,如果匹配不到,再按 byType的方式进行匹配。
    3、@Qualifier 注解可以按名称注入, 但是注意是 类名。


    一、线程中注入Service层或Dao层

    有些情况我们需要在工具类或在new一个线程之后,线程中注入Service层或Dao层,这时候用以上方法是注入不进去

    用以下方法即可注入:

    package com.java.base.config;
     
    import java.lang.annotation.Annotation;
    import java.util.Map;
     
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Service;
    /***
     * 
     * 

    Title: MyApplicationContext

    *

    Description: ApplicationContextAware 通过它Spring容器会自动把上下文环境对象调用ApplicationContextAware接口中的setApplicationContext方法。 * 通过这个上下文环境对象得到Spring容器中的Bean * 在我们写的工具类获取线程中不能直接通过Spring注入,这个时候就需要通过ApplicationContext获取Bean *

    * @author shy */
    @Service public class MyApplicationContext implements ApplicationContextAware { private static ApplicationContext context; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { context = applicationContext; } public static <T> T getBean(final Class<T> requiredType) { return context.getBean(requiredType); } public static <T> T getBean(final String beanName) { @SuppressWarnings("unchecked") final T bean = (T) context.getBean(beanName); return bean; } public static <T> Map<String, T> getBeans(final Class<T> requiredType) { return context.getBeansOfType(requiredType); } public static Map<String, Object> getBeansWithAnnotation(final Class<? extends Annotation> annotationType) { return context.getBeansWithAnnotation(annotationType); } }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    private XXXrService xxxService = MyApplicationContext.getBean(XXXService.class);
    
    • 1

    总结

    如果此篇文章有帮助到您, 希望打大佬们能关注点赞收藏评论支持一波,非常感谢大家!
    如果有不对的地方请指正!!!

    参考1

  • 相关阅读:
    Mysql之进阶查询语句
    Python字符串类型详解(三)——字符串类型的格式化
    什么是IDE?新手用哪个IDE比较好?
    如何去正确理解股票量化接口的真实用途?
    Node.js入门 | 青训营笔记
    从零开始制作【立体键盘】,画UI免写CSS,【盲打练习】的交互逻辑只用了10来行表达式!
    大数加减,不使用BigInt,可以采用进位运算
    linux安装配置 kafka并简单使用
    mongo基础操作总结
    LNMP动静分离,负载均衡及高可用搭建
  • 原文地址:https://blog.csdn.net/weixin_42326851/article/details/126510734