首先,我们来看看@SpringBootApplication注解代码,如下代码,它分别继承了3个注解
所以它同时具备了@ComponentScan、@EnableAutoConfiguration的功能。
很多Spring Boot开发者总是使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 注解他们的main类。 由于这些注解被如此频繁地一块使用(特别是你遵循以上最佳实践时) , Spring Boot提供一个方便的 @SpringBootApplication 选择。该 @SpringBootApplication 注解等价于以默认属性使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 。
main应用类的位置
一般来说, main应用类应该放在其他类上面的根包(root package) 中,此时@ComonentScan注解不需要配置basePackage
属性,这个包下的所有子包和子类都会被扫描。
下面是一个典型的结构:
- 1
@EnableAutoConfiguration
这个注解是Spring应用程序上下文的自动配置,尝试猜测和配置您可能需要的bean。自动配置类通常基于类路径和定义的bean应用。例如,如果你有 tomcat-embedded.jar在您的类路径中,你可能会想要一个TomcatEmbeddedServletContainerFactory(除非你定义自己的EmbeddedServletContainerFactory bean)。
当然我们也可能不需要他自动配置,这时候需要用排除的方式:
Spring Beans和依赖注入
你可以自由地使用任何标准的Spring框架技术去定义beans和它们注入的依赖。 这里经常使用 @ComponentScan 注解搜索beans, 并结合 @Autowired 构造器注入。
如果使用上面建议的结构组织代码(将应用类放到根包下) , 你可以添加 @ComponentScan 注解而不需要任何参数。 你的所有应用程序组件(@Component , @Service , @Repository , @Controller 等) 将被自动注册为Spring Beans。