说明:
(1)为什么写了本篇博客?:
● 在【16:第二章:架构后端项目:12:配置mybatis;(在【imooc-news-dev-service-user】这个微服务子工程上,配置)】中,我们在【imooc-news-dev-service-user】这个微服务子工程上,在其主启动类上使用了@ComponentScan注解;
● 但是,按理说,对于Spring Boot项目,有了SpringBootApplication是可以不用再使用@ComponentScan的;自己在【(19)Spring Boot电商项目】这个项目中,就没有使用;
● 但是,虽然默认可以不用加。但是一般项目会加其他一些自定义的包,所以可以用于指定噢~
● 但是,这其中的细节到底是什么呐,正式本篇博客的内容;
下面,是一个故事,顺着看下来,就能明白了;
(1)Spring的一个特点就是IoC容器,也就是IoC容器管理我们的对象;
(2)当我么使用注解方式开发时候,Spring就可以通过我们使用的【@Repository,@Service,@Controller,@Component】这之类的注解,来把使用了这些注解的类实例化对象、放到IoC容器中;
● 在【Spring IoC容器与Bean管理21:使用注解方式实现Spring IoC二:组件类型注解(对象实例化);@Repository,@Service,@Controller,@Component;】我们做了介绍;
● 我么在Spring MVC项目中,会在applicationContext.xml配置文件中,配置<context:component-scan>;<context:component-scan>意思是组件扫描,其作用是:在IoC容器初始化时,自动扫描【@Repository】、【@Service】、【@Controller】、【@Component】这四种【组件类型】注解,并完成实例化;
(3)后来,有了更加方便的Spring Boot,由于约定>配置的指导原则,很多配置采取默认就行,我们不再需要很多繁琐的配置了;
● 比如,在Spring Boot项目中,其会默认扫描【启动类所在的包以及其子包中的类,然后把其实例化为bean,使用IoC管理起来】;(其他的包是不会扫描的;如果还想让其扫描其他的包,就需要使用@ComponentScan去指定,否则就不会把那些bean交到spring管理。)
● 自然,如果其默认扫描范围已经OK了;;;如果不嫌麻烦,依旧是可以使用@ComponentScan去指定范围的;