山东网站开发制作网易疫情实时最新数据
问题
- @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派生而来,提供了更多面向实际应用的功能。”