做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有值了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端