@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的资料请关注脚本之家其它相关文章!
相关文章
Mybatis-plus 批量插入太慢的问题解决(提升插入性能)
公司使用的Mybatis-Plus操作SQL,用过Mybatis-Plus的小伙伴一定知道他有很多API提供给我们使用,但是批量插入大数据太慢应该怎么解决,本文就详细的介绍一下,感兴趣的可以了解一下2021-11-11
spring中向一个单例bean中注入非单例bean的方法详解
Spring是先将Bean对象实例化之后,再设置对象属性,所以会先调用他的无参构造函数实例化,每个对象存在一个map中,当遇到依赖,就去map中调用对应的单例对象,这篇文章主要给大家介绍了关于spring中向一个单例bean中注入非单例bean的相关资料,需要的朋友可以参考下2021-07-07


最新评论