SpringBoot的@SpringBootApplication注解和其他几个注解

首先,我们来看看@SpringBootApplication注解代码,如下代码,它分别继承了3个注解

1、@EnableAutoConfiguration
2、@ComponentScan
3、@SpringBootConfiguration    
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
//.....
}

所以它同时具备了@ComponentScan、@EnableAutoConfiguration的功能。

很多Spring Boot开发者总是使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 注解他们的main类。 由于这些注解被如此频繁地一块使用(特别是你遵循以上最佳实践时) , Spring Boot提供一个方便的 @SpringBootApplication 选择。该 @SpringBootApplication 注解等价于以默认属性使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 。

main应用类的位置

一般来说, main应用类应该放在其他类上面的根包(root package) 中,此时@ComonentScan注解不需要配置basePackage属性,这个包下的所有子包和子类都会被扫描。

下面是一个典型的结构:

cn
    +- zgd
        +- project
            +- Application.java
            |
            +- domain
            | +- Customer.java
            | +- CustomerRepository.java
            |
            +- service
            | +- CustomerService.java
            |
            +- web
            +- CustomerController.java

@EnableAutoConfiguration

这个注解是Spring应用程序上下文的自动配置,尝试猜测和配置您可能需要的bean。自动配置类通常基于类路径和定义的bean应用。例如,如果你有 tomcat-embedded.jar在您的类路径中,你可能会想要一个TomcatEmbeddedServletContainerFactory(除非你定义自己的EmbeddedServletContainerFactory bean)。

当然我们也可能不需要他自动配置,这时候需要用排除的方式:

@Configuration
//exclude= {DataSourceAutoConfiguration.class} 通过排除属性来禁止DataSourceAutoConfiguration的配置
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
@ComponentScan
public class Application {
.....

Spring Beans和依赖注入

你可以自由地使用任何标准的Spring框架技术去定义beans和它们注入的依赖。 这里经常使用 @ComponentScan 注解搜索beans, 并结合 @Autowired 构造器注入。
如果使用上面建议的结构组织代码(将应用类放到根包下) , 你可以添加 @ComponentScan 注解而不需要任何参数。 你的所有应用程序组件(@Component , @Service , @Repository , @Controller 等) 将被自动注册为Spring Beans。

猜你喜欢

转载自blog.csdn.net/zzzgd_666/article/details/80310840
今日推荐