最近在阅读项目代码时,有个疑问:某个service类没有定时器,也没有调用方,它是怎么跑起来的?后来请教了同事之后发现,关键在于这个类实现了ApplicationListener<ContextRefreshedEvent>接口,再加上@Service注解。这个类是一个事件监听器,spring启动有一步是发布事件,最终会触发监听器的onApplicationEvent方法。这不是web服务,而平时常见的都是web服务,或者mq,dubbo,都有请求来源,所以犯了思维定式的错误。

百度了一下,很多文章都是用@Component注解,其实@Service与@Component都能起作用,因为@Controller, @Service, @Repository都包含了@Component :

查看spring官网:

也就是说,如果你不知道要在项目的业务层采用@Service还是@Component注解。那么,@Service是一个更好的选择。
公司这个代码没有定时器,没有外部调用,是因为它启动之后,另起一个线程,在run方法中用while循环,线程sleep时间是500 ms。
网友评论