今天遇到一个问题,使用 @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 了后就不会自动注入了
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。