@Autowired注入为null的原因与解决方法
前言
我们经常会通过@Autowired注解将某个类注到另一个类中,但是会发现注不进去,报NULL。
原因
可能的原因有一下几种:
(1)该类没有托管给spring 管理
一般在类的上面添加@Component 就可以了
(2)你的这个类有被new出来的实例的,new 过的对象不会交给Spring容器管理 所以里面的 service或者dao注入不进来。一般是指引用某些框架,你是继承某个接口,但是这些框架默认new过这个方法,比如MVC拦截的HandlerInterceptor类。
如果要new的这个类里有想用@autowired 自动注入的内容,则最好不要去new这个类,否则自动注入无效,为null;
解决方法
解决办法:要用这个类的时候,这个类也用@autowired 自动注入
有时候你确实需要在这个new 的类去注入某些类,但是用@Autowired 又注入为null,这时候我们需要手动去弄Spring容器中的Bean实现ApplicationContextAware接口。
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class BeanUtils implements ApplicationContextAware {
protected static ApplicationContext applicationContext ;
@Override
public void setApplicationContext(ApplicationContext arg0) throws BeansException {
if (applicationContext == null) {
applicationContext = arg0;
}
}
public static Object getBean(String name) {
//name表示其他要注入的注解name名
return applicationContext.getBean(name);
}
/**
* 拿到ApplicationContext对象实例后就可以手动获取Bean的注入实例对象
*/
public static <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
}案列:
SysDictService sysDictService = BeanUtils.getBean(SysDictService.class);
以上就是@Autowired注入为null的原因与解决方法的详细内容,更多关于@Autowired注入为null的资料请关注脚本之家其它相关文章!
相关文章
jackson 实现null转0 以及0转null的示例代码
这篇文章主要介绍了jackson 实现null转0 以及0转null的示例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-09-09
如何解决UnsupportedOperationException异常问题
这篇文章主要介绍了如何解决UnsupportedOperationException异常问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-05-05
SpringBoot和MyBatis环境下实现动态数据源切换过程
dynamic-datasource-spring-boot-starter 是一个用于在SpringBoot和MyBatis环境下实现动态数据源切换的工具,它简化了配置和切换逻辑,通过引入依赖,配置数据源和使用@DS注解,可以轻松实现数据源的动态切换2025-10-10


最新评论