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注解,所以一定要理解他的功能和实现。