springboot中@Autowired 注入失效的四种原因及解决方法 您所在的位置:网站首页 springboot注入接口会有并发问题吗 springboot中@Autowired 注入失效的四种原因及解决方法

springboot中@Autowired 注入失效的四种原因及解决方法

2023-07-21 23:11| 来源: 网络整理| 查看: 265

1. 被注入的对象没有加载到spring容器中

通常是因为被注入的对象没有被spring扫描到,此时需要添加对应的包扫描路径。

添加包扫描 在启动类中定义分别扫描两个包 ,即在@SpringBootApplication注解的类中添加: @ComponentScan({“com.demo.test1”,“com.demo.common”}) 2. 需要自动注入的对象不是spring加载,而是new的方式创建

由于对象不是spring创建的,当然spring也就无法根据注解自动注入对应的实例对象。

此时可以采用代码的方式,从spring容器中获取对象实例。

通过Spring上下文工具类获取bean 定义一个SpringUtil类 /** * Spring上下文工具类,用以让普通类获取Spring容器中的Bean */ @Component public class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext = null; //获取applicationContext public static ApplicationContext getApplicationContext() { return applicationContext; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if (SpringUtil.applicationContext == null) { SpringUtil.applicationContext = applicationContext; } } //通过name获取 Bean public static Object getBean(String name) { return getApplicationContext().getBean(name); } } 然后在类A中通过如下调用获取Spring容器中的实例 3. 需要自动注入的对象不是spring加载,而是采用反射的方式创建

这种情况和第二种情况类似,通常在一些框架调用的时候,采用的对象创建方式,为了避免对spring的依赖,采用类的反射方式进行创建。

此时可以采用代码的方式,从spring容器中获取对象实例。 方法和第二种情况相同。 4. 使用springboot的devtools热部署加载的类

热部署加载的类使用的加载器和spring容器的加载器不同,所以热部署加载器加载的类,访问不到spring容器中的对象。

这种情况通常发生在使用热部署过程中,禁用热部署后该问题就不存在了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有