SpringBoot项目使用注入的Service或DAO时值为空

  • Post author:
  • Post category:其他



最近写了一个爬虫程序,实现通过搜狗微信获取微信公众号内容。首先可以正确获取内容到控制台,但当想把内容存储到数据库时遇到了问题。我把这个爬虫程序放到我已有的一个SpringBoot项目中,这里已有news新闻表的DAO和Service,在项目的Controller或者数据库初始化部分,想要往news表里插入数据,只需要@Autowired NewsDAO或者@Autowired NewsService即可。但在爬虫程序里这么使用却报java.lang.NullPointerException,说明对象没有用具体的类初始化。但在SpringBoot如果使用@Autowired自动注入bean是不需要初始化的啊,那究竟是为什么,怎么解决呢?


刚开始我以为是注解没有扫描到,因为之前和现在项目中都存在一些@Autowired后面的内容下面有红色波浪线提示could not autowire的情况,所以我想着先把这个问题解决了。但是无论是通过

这篇文章

的方法还是在@Autowired加(required = false),都没有真正的解决问题,只是让编辑器不报这个错误。这时我突然想到,经过上述改动后项目是可以正常运行的,其他地方可以正常插入数据,也就是注解扫描到了。而在爬虫程序中还是报空指针异常错误,所以应该不是这个问题,换一个思路。


这时我受到

这篇文章

的启发,豁然开朗。原来我在爬虫程序里调用自动注入的bean是在main函数里一个new出来的对象中,对象是被new出来的,Spring没有自动注入,没有被Spring管理,故为null。所以解决方法是用一个类包装下需要自动注入的bean,然后写一个get方法返回,接着在爬虫程序里继承这个类。但是在我的爬虫程序里已经继承了一个类,所以这里不能通过继承的方式,只能写一个静态类函数createMysqlTemplete重新建立JDBC连接,然后在爬虫程序里调用。


之后我会写一篇文章来详述这个爬虫程序,敬请期待。

参考文献:

http://blog.csdn.net/xlxxybz1314/article/details/51404700

http://www.mamicode.com/info-detail-1968148.html



版权声明:本文为HEYIAMCOMING原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。