欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

springboot普通类调用bean

时间:2023-06-12
问题

@Autowired @Bean注入但是空指针异常测试类中能获取,但普通类中空指针需要在普通类中调用bean 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 getBean(Class requiredType){ return getApplicationContext().getBean(requiredType); } //通过id名获取bean public static T getBean(String name){ return (T) getApplicationContext().getBean(name); } }

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

用这种方法就不会报错了

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

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。