spring boot 注解
1 简介
在SpringBoot 的启动类里,默认使用了一个注解@SpringBootApplication
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
@SpringBootApplication 源码如下:
@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 {}; @AliasFor(annotation = Configuration.class) boolean proxyBeanMethods() default true; }
2 三个重要注解
@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。
2.1 @Configuration在SpringBoot中,被@Configuration 注解的类是一个配置类,相当于Spring中的xml配置文件。
2.2 @EnableAutoConfiguration
@EnableAutoConfiguration借助@Import注解使用AutoConfigurationImportSelector将所有符合自动配置条件的bean定义加载到Spring的IoC容器中。
源码如下:
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; Class<?>[] exclude() default {}; String[] excludeName() default {}; }
2.3 @ComponentScan
@ComponentScan的作用是开启Spring的自定扫描功能,将范围内被@Component 注解的类加载到容器中,并生成bean。可以通过basePackages等属性指定自动扫描的范围。如果不指定,则默认是从被@ComponentScan注解的类所在的package进行扫描,因此SpringBoot的启动类最好放在项目的root package下面,这样才能保证整个项目下的所有类都在扫描范围中。
3 @SpringBootApplication的4个属性
@SpringBootApplication 注解提供了4个属性可供配置:
exclude —— 根据Class对象来排除特定的类,不加入到Spring容器中,传入Class数组。
excludeName —— 根据类名来排除特定的类,不加入到Spring容器中,传入参数是类的全限定名数组。
scanBasePackages —— 指定自动扫描的包,参数是字符串数组。
scanBasePackageClasses —— 指定自动扫描的包,参数是Class对象数组。

浙公网安备 33010602011771号