2

今天遇到一个问题,使用 @Autowired 注解的时候,有个mapper的接口怎么都注入不进来,死活不知道哪错了,按道理在类上加上了 @Component 注解,就交给 IOC 容器可以反射创建对象了


后来经过很长很长时间的自闭百度,发现了问题的所在。

问题

我在这个类上使用的 @Component    然后在其他地方  new  了一个这个带有 @Component 类的对象。

这个时候看着没问题,其实已经错了。


原因如下:

当通过new的方式创建一个对象的时候,虽然期望使用了注解@Autowired对这个对象进行装配,但是Spring是不会这么做的,因为Spring不会对任意一个new 出来的对象进行自动装配,只有这个对象也是一个在Spring中注册过的Bean,才会获得自动装配的功能。

这时候,只需要把 new  去掉就好了


结论

new出来的对象中无法使用@autowired进行对象bean注入

在我new的类使用了@autowired注入,但是测试发现并没有注入进来,对象是空的


错例
@Component
public class person{
    @Autowired
    Stay stay;
    
    public void ye(){...}
}
public class Main{
    new person().ye();
    // 不要 new person , new 了后就不会自动注入了
}

lankeren
44 声望6 粉丝

有效果,达到目标的努力是真努力,其余不能称之为努力。