SpringBoot入门——启动类的注解

 

1、SpringBoot项目创建完成之后默认会生成一个*Application的入口类,通过该类的main方法即可启动SpringBoot项目。

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

2、在此入口类中,我们可以看到SpringBoot创建的业务代码中的一个注解——@SpringBootApplication,这也是SpringBoot的核心注解。源代码如下:

@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 {
     /**
	 * 根据类排除不使用的自动配置
	 */
    @AliasFor(
        annotation = EnableAutoConfiguration.class
    )
    Class<?>[] exclude() default {};

     /**
	 * 根据类名排除不使用的自动配置
	 */
    @AliasFor(
        annotation = EnableAutoConfiguration.class
    )
    String[] excludeName() default {};

     /**
	 * 指定扫描的包
	 */
    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackages"
    )
    String[] scanBasePackages() default {};

     /**
	 * 指定扫描的类
	 */
    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackageClasses"
    )
    Class<?>[] scanBasePackageClasses() default {};
}

exclude:根据类排除不使用的自动配置;
excludeName:根据类名排除不使用的自动配置;
scanBasePackages:扫描指定的包;
scanBasePackageClasses:扫描指定的类;


 @SpringBootApplication = @SpringBootConfiguration(Configuration) + @EnableAutoConfiguration + @ComponentScan。

Configuration:普通配置类。

EnableAutoConfiguration :开启自动化配置(Spring/SpringMVC那套东西都有了 )。可以根据类路径中的jar包依赖可以为项目进行一些自动配置。这也是SpringBoot最核心的功能。

ComponentScan:用来指定扫描的组建所在的包路径或class文件(扫描启动类所在的包下面的所有类)。

如果忘记或不知道SpringBoot默认扫描的路径,随意创建包和类的位置,导致项目启动之后,无法实例化对应的组建,无法正确访问接口,那么我们就可以使用@ComponentScan来指定一些特殊的需要实例化的包或类,如下:

//指定一些特殊的需要实例化的包或类

@SpringBootApplication(scanBasePackages = “com.example.controller")
// 或者
@ComponentScan(basePackages = "com.example.controller")

 


版权声明:本文为ourstronger原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。