做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 @   lhbili  阅读(57)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示