做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有值了

 

posted @ 2022-10-12 13:11  lhbili  阅读(64)  评论(1)    收藏  举报