做webmagic时Springbean的一点小细节
最近根据webmagic框架随便写了一个爬取新闻的工具,想着能不能与springboot结合在一起去持久化数据。
在启动项目时,发现报了空指针异常,经过debug发现

持久层保存数据时newsService自动装配失败
当时百思不得其解,上网查了各种解决方法是做了无用功,最后才发现原来是这一串代码出了问题
Spider.create(new NewsProcessor()) .addUrl("http://bj.people.com.cn/") .thread(5) .addPipeline(new NewsPipeline()) .run();
从上可以知道,addPipeline时我new了一个新的对象,而这正好与spring框架相悖,由于我们已经将NewsPipeline这个类交给了IOC容器管理了,实例化对象并且填充属性等一些操作,应该由spring帮我们完成。
看到了自己出了这种错误才知道自己是多么的无知(不要好高骛远!!)
补充:由于NewsPipeline的自动装配涉及到了,静态变量的自动装配,下面进行阐述:
对于非强制的,用setter注入,对于强制的,用构造器注入
setter注入的自动装配如下
private static NewsPipeline newsPipeline; public NewsPipeline getNewsPipeline() { return newsPipeline; } @Autowired public void setNewsPipeline(NewsPipeline newsPipeline) { this.newsPipeline = newsPipeline; }
这个时候在debug一下,就发现newsService有值了


浙公网安备 33010602011771号