侧边栏壁纸
博主头像
lai博主等级

  • 累计撰写 21 篇文章
  • 累计创建 12 个标签
  • 累计收到 0 条评论

SpringBoot如何实现手动注入Bean

lai
lai
2021-06-01 / 0 评论 / 0 点赞 / 1,051 阅读 / 1,445 字
温馨提示:
本文最后更新于 2021-06-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

场景

在一些开发过程中,@Component,@Configuration类中使用@Autowired@Resource无法注入需要Bean的情况下,我们需要通过手动方式实现Bean的注入,可以通过实现ApplicationContextAware达到预期目标

代码实现

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

@Component
public class SpringContextUtils implements ApplicationContextAware {

    public static ApplicationContext applicationContext;

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

    public static Object getBean(String name) {
        return applicationContext.getBean(name);
    }

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

    public static boolean containsBean(String name) {
        return applicationContext.containsBean(name);
    }

    public static boolean isSingleton(String name) {
        return applicationContext.isSingleton(name);
    }

    public static Class<? extends Object> getType(String name) {
        return applicationContext.getType(name);
    }
}

使用

避免Bean加载顺序导致NullPointException,建议在需要引用工具类的类上添加注解@DependsOn("springContextUtils")

注入Bean
Bean bean= (Bean)SpringContextUtils.getBean("beanName")

0

评论区