今天突然有个朋友在写代码的时候问我,@autowired没注入,截图给我看。我看了看基本也没什么问题,结果截图业务逻辑的时候,居然是new的,肯定空指针
列举一般无法注入的情况(只针对spring,dubbo配置等不算在内):
1、spring boot项目启动类入口尽量放在顶级包下,spring会自动扫描子包以及子孙包的bean,基本不会存在无法注入的情况。普通spring项目配置文件配置<context:component-scan base-package="com.springmvc.test" />等
2、由于spring帮我们管理bean,容器里面的bean默认是单例的,除非自行配置scope=prototype
@Component(value="user") //<bean id="user" class="">
//@Scope(value="prototype") //创建多实例
public class User {
}
所以不要自己去new,比如new xxxService(), 这个service对象是有的,但是里面注入的属性全部是null,spring不会给new出来的对象注入属性
比如,在其他地方使用MemberService member=new memberServiceImpl()
然后调用memberServiceImpl里面的方法,如果使用到了其中注入的属性mapper、queue等,100%空指针异常!
3、注解没有贴,注入失败。类没有贴@Controller、@Service、@Component等注解,不会纳入spring ioc bean生命周期,互相使用的类都要贴上注解