spring注入为null
最近在学习爬虫,找到了webmagic和crawler4j这两个开源项目,但是在webmagic的pipeline里面和crawler4j的visit里面使用了一个用@autowired注入的一个DAO,在处理数据的时候发现注入的bean为null,请问大家是否有遇到这种情况,为什么bean无法注入?
我看代码可能是因为这两个crawler都用了new的方式去新建线程,不知道有没有人知道如何解决这个问题?
多谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(18)
应该是你说的第一种情况,因为被注入的对象用了newInstance所以没有被spring管理到,这种情况用户自己new的有办法交给spring管理吗?
你可以看下源码,在CrawlController这个类中的start方法,调用的_c.clone,此方法是个java类的的 newInstance,所以你如果自己配置了些属性,再用这种方法给初始化,则会报空指针错误。你只要复写这个protected <T extends WebCrawler> void start(final AbstractWebCrawler _c, final int numberOfCrawlers, boolean isBlocking) 这个方法,方法里传递Class对象类型变更为对象实例,就OK了。
@maradona 好的,我去找找看别人怎么处理的,谢谢你哈。
回复
没有被spring管理的对象,那就不能用注解注入 搜索引擎 + 关键字:普通java对象调用spring bean 你可以找到很多
@选哥去拯救世界 回复
@选哥去拯救世界 : 你的问题是咋解决的,我也遇到了同样的问题
一般spring注入为空,一个是被注入对象未被spring管理,一个是注入对象未被spring管理
看你描述,你可以在两个地方的构造方法中打印或者断点(没有就自己加一个无参的构造方法),然后你应该明白了
检查下注解,扫描路径等等...
@Resource也没有办法注入
回复
那就给出代码,没代码没办法继续下去了
@阿信sxq 代码有点多,用的是crawler4j和webmagic开源代码,不方便抠到这里来
注入我都是用的
在setter方法上面
有,spring已经托管了
@开源中国首席二弟子 配置正确的时候,什么情况下spring无法注入,这个你知道吗?
回复
以前遇到过是这个bean根本没有初始化,不在容器里。还有是用了继承关系。你这个都排除了啊
其他地方autowired是正常的
回复
这样的话,代码编写没有问题吧,写一个其他的变量试试注入看,应该很好解决的
@阿信sxq 什么其他变量?这里应该是spring的注入都是有问题的
回复
写个其他的变量让spring来注入
问题是那个dao实例实际生成没有,没生成的话,为什么没有生成