美文网首页知识的搬运者
在SpringBoot用普通类调用Spring管理的Bean

在SpringBoot用普通类调用Spring管理的Bean

作者: 枫未晚 | 来源:发表于2022-05-05 13:50 被阅读0次

在SpringBoot项目中,使用@Controller等注解标注的类才能使用String提供的依赖注入,或者用@Component注解把类的创建交给Spring来管理也能使用。可是有时候需要直接在普通类里使用DAO层等提供的方法,但又不能让Spring管理这个类,这时候就需要事先保存ApplicationContext对象来提供Bean的调用

首先创建一个用来保存ApplicationContext对象的工具类

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.lang.NonNull;

@Slf4j
public class SpringUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext = null;

    @Override
    public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException {
        if (SpringUtil.applicationContext == null) {
            SpringUtil.applicationContext = applicationContext;
        }
        log.info("---------------------------------------------------------------------");
        log.info("            SpringUtil init applicationContext success");
        log.info("---------------------------------------------------------------------");
    }

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 通过name获取Bean
     */
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }

    /**
     * 通过class获取Bean
     */
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }

    /**
     * 通过name,以及Clazz返回指定的Bean
     */
    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }
}

然后在Application启动类上方增加如下注解,Application启动时就会调用该工具类的setApplicationContext方法

@Import(SpringUtil.class)

现在就可以通过工具类直接在普通类里获取Spring管理的Bean了

SpringUtil.getBean(TestDAO.class);

相关文章

  • 在SpringBoot用普通类调用Spring管理的Bean

    在SpringBoot项目中,使用@Controller等注解标注的类才能使用String提供的依赖注入,或者用@...

  • 如何使用Spring的FactoryBean接口

    如何使用Spring的FactoryBean接口 在Spring容器中有两类的Bean,一类是普通的Bean,一类...

  • Spring Boot普通类调用bean

    http://412887952-qq-com.iteye.com/blog/2292388

  • Spring快速入门

    Spring Spring是什么 Spring是一个开源的轻量级框架,是一个管理Bean的容器(普通Java类容器...

  • 各种注解

    @bean 声明为bean对象,并交给Spring管理,产生这个Bean对象的方法Spring只会调用一次,随后这...

  • 非 Spring 管理的 Bean 使用 SpringBean

    添加Spring工具类 以 RestUtil工具类 使用 RestTemplate(Spring管理的Bean) ...

  • Spring泛览一

    Spring spring-core: 核心工具类 spring-bean: 用于访问配置文件,创建和管理bean...

  • Spring

    Spring spring是一个开源的轻量级框架,是一个管理的Bean的容器(普通的Java类容器),这里可以对比...

  • SpringBoot进阶学习上篇

    1、SpringBoot核心概念 1.1Spring优缺点 Spring优点:通过IOC容器统一管理Bean大大简...

  • Spring目录

    Spring 入门 Spring-Bean管理 Spring快速入门 Spring-Bean管理 Spring属性...

网友评论

    本文标题:在SpringBoot用普通类调用Spring管理的Bean

    本文链接:https://www.haomeiwen.com/subject/nmzayrtx.html