springboot普通类调用bean

问题

  • @Autowired @Bean注入但是空指针异常
  • 测试类中能获取,但普通类中空指针
  • 需要在普通类中调用bean

Bean结构

yml
bean类

痛点

这样的结构可以直接在@Controller层 @Service层 @Mapper层 @SpringBootApplication启动类中 @SpringBootTest测试类中
直接通过

@Autowired 
private OSSphotoConfig osspc;

来获取bean的实例,并且可以正常调用,但是这些调用方的类都不是普通类,有时需要在普通类中调用bean,通过@Autowired @Bean等方法注入都会失效,运行会报空指针异常,以下使用工具类解决这个问题

工具类实现ApplicationContextAware接口

  • 任意找一个包下创建一个工具类,这个工具类可以通过反射获取bean,不需要通过@Autowired或@Bean即可在普通类中使用bean

  • 并且这个工具类是通用的

      @Component
      public class SpringContexUtil implements ApplicationContextAware {
      private static ApplicationContext applicationContext;
    
      @Override
      public void setApplicationContext(ApplicationContext context) throws 	BeansException {
          applicationContext = context;
      }
    
      //静态加载applicationContext
      public static ApplicationContext getApplicationContext() {
          return applicationContext;
      }
      //通过反射获取Bean
      public static <T> T getBean(Class<T> requiredType){
          return getApplicationContext().getBean(requiredType);
      }
      //通过id名获取bean
      public static <T> T getBean(String name){
          return (T) getApplicationContext().getBean(name);
      }
      }
    

在普通类中调用接口的静态方法获取bean

用这种方法就不会报错了

引用一句话------“如果说BeanFactory是Spring的心脏,那么ApplicationContext就是完整的身躯了。ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的功能。”

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值