SpringBoot注解的使用(一):@SpringBootApplication

SpringBoot注解的使用(一)

一、 @SpringBootApplication

当我们创建一个springboot项目之后,都会在src.main.java包下自动生成一个Application类,这个类是一个启动类,帮我们完成了SSM框架中大部分繁琐的操作,代码如下:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

代码十分的简洁清晰,这都要归功于我们的注解: @SpringBootApplication
它是一个复合注解,由以下三个注解组成:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ConponentScan

他们三个的功能就组成了SpringBootApplication的功能,那么这三个注解我们一个个的来分析。


1.@SpringBootConfiguration

@Configuration
public @interface SpringBootConfiguration{
    @AliasFor(
        annotation = Configuration.class
    )
    boolean proxyBeanMethods() default true;
}

大家可以看到,在SpringBootConfiguration类中还有一个@Configuration注解,此注解大家应该很熟悉,在SSM框架中经常可以看到:

有@Configuration注解的类可以当作配置文件来用,可以定义bean,把对象注入到容器中。

Appliaciton类中有SpringBootConfiguration注解,SpringBootConfiguration类中有Configuration注解,因此Application类就可以声明对象,将对象注入到容器中

//声明对象,将对象注入到容器中
    @Bean
    public Student myStudent(){
        return new Student();
    }

2.@EnableAutoConfiguration

@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
    
    Class<?>[] exclude() default {};
    
    String[] excludeName() default {};
}

@EnableAutoConfiguration的功能是启用自动配置,把java对象配置好,注入到spring容器中,例如可以把mybatis的对象创建好,放入到容器中。
此注解的内部逻辑是很复杂的,能了解它的功能暂时就可以了。

3.@ComponentScan

@Repeatable(ComponentScans.class)
public @interface ComponentScan {
    @AliasFor("basePackages")
    String[] value() default {};

    @AliasFor("value")
    String[] basePackages() default {};

    Class<?>[] basePackageClasses() default {};

    Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;

    Class<? extends ScopeMetadataResolver> scopeResolver() default AnnotationScopeMetadataResolver.class;

    ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT;

    String resourcePattern() default "**/*.class";

    boolean useDefaultFilters() default true;

    ComponentScan.Filter[] includeFilters() default {};

    ComponentScan.Filter[] excludeFilters() default {};

    boolean lazyInit() default false;

    @Retention(RetentionPolicy.RUNTIME)
    @Target({})
    public @interface Filter {
        FilterType type() default FilterType.ANNOTATION;

        @AliasFor("classes")
        Class<?>[] value() default {};

        @AliasFor("value")
        Class<?>[] classes() default {};

        String[] pattern() default {};
    }
}

@ComponentScan是一个组件扫描器,用于寻找注解组件,根据注解的功能来创造对象,给属性赋值等等。
默认扫描的包:@ComponentScan所在的类所在的包和子包。


只要是SpringBoot项目,都要用到@SpringBootApplication注解,所以一定要理解他的功能和实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值