问题

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

Bean结构


痛点

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

@Autowired
private OSSphotoConfig osspc;

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

工具类实现ApplicationContextAware接口

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

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

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

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

用这种方法就不会报错了

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

springboot普通类调用bean相关推荐

  1. 17、Spring Boot普通类调用bean【从零开始学Spring Boot】

    转载:http://blog.csdn.net/linxingliang/article/details/52013017 我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个 ...

  2. java懒加载注解_在springboot中实现个别bean懒加载的操作

    懒加载---就是我们在spring容器启动的是先不把所有的bean都加载到spring的容器中去,而是在当需要用的时候,才把这个对象实例化到容器中. @Lazy 在需要懒加载的bean上加上@Lazy ...

  3. spring-boot 引入xml注入bean

    2019独角兽企业重金招聘Python工程师标准>>> spring-boot 引入xml注入bean 配置 public class TestServiceImpl impleme ...

  4. java filter注入,Spring-boot中Filter注入bean

    Spring-boot中Filter注入bean 在spring中使用Filter的方式不用再多说,但是通常情况下我们在使用filter中都可能会注入部分配置的类或者部分具有特殊功能的业务类. 在这种 ...

  5. springboot webservice接口调用_springboot远程调用dubbo服务接口

    1.首先idea新建一个springboot项目,这里简单介绍下: 2.在springboot启动类上加入注解 @ImportResource(locations = {"classpath ...

  6. java spring配置类_spring 配置 Java配置类装配bean

    https://www.cnblogs.com/chenbenbuyi/p/8457700.html 自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应 ...

  7. springBoot启动类报错

    关于SpringBoot启动类报错的问题解决: APPLICATION FAILED TO START Description: Field elasticsearchRestTemplate in ...

  8. SpringBoot:yaml配置注入bean

    SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的. 有分成application.properties和application.yml两种结构,这两种结构: application ...

  9. 如何调用封装工具类调用网上接口查询工作日

    如何调用封装工具类调用网上接口查询工作日 这里的编辑器是STS,用的springboot集成环境: 先引进pom.xml依赖包 <?xml version="1.0" enc ...

最新文章

  1. 【CSS3教程】CSS3基础常用技巧实例集合
  2. python源代码不需要编译成什么-编译 Python 源代码
  3. alert时java还时js_js 加alert后才能执行方法
  4. 创意夜晚行驶迷路网站404页面源码
  5. JavaScript:函数
  6. Android近场通信---高级NFC(二)
  7. 赠书 | 数据库怎么选择?终于有人讲明白了
  8. Bert模型进行文本分类
  9. mysql 命令查看sql文件大小_用SQL命令查看Mysql数据库大小
  10. 计算机图像处理发展前景,数字图像处理发展前景
  11. uni-app 连接蓝牙打印机
  12. 统计bed文件下的reads数目和GC含量
  13. 百度Clouda的初步探索
  14. 室内定位蓝牙信标安装规划问题
  15. 游戏中要遵守道德规范吗?谈《荒野大镖客2》道德体验设计的意义
  16. 移动通信的主要测量指标及注意事项(转)
  17. 我写的阿拉伯数字转中文大写的一个方法
  18. OpenCV路在何方
  19. python办公笔记分享
  20. 洛谷 p1010 幂次方 python实现

热门文章

  1. 學習雜記(SpringCloud)
  2. Linux图形子系统之GEM内存管理
  3. docker实现quagga_docker和Quagga BGP
  4. 建立适当的索引(ZZ)
  5. 基于粤嵌6818开发板上通过网络连接实现文件传输
  6. 飞塔防火墙固定IP改动态IP网络设置
  7. 静态IP与动态IP的区别
  8. 用div来代替table
  9. DaVinci Resolve Studio达芬奇调色v17.0.0.39安装说明
  10. 记录IDEA导包不能导入的问题