springboot注解@SpringBootApplication分析
@SpringBootApplication注解⽤在Spring Boot的⼊⼝类上⾯,是Spring Boot提供的应⽤启动相关的注解。
直接上注解的源码:
@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, attribute = "exclude")
Class<?>[] exclude() default {};springmvc作用通俗
@AliasFor(annotation = EnableAutoConfiguration.class, attribute = "excludeName")
String[] excludeName() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
String[] scanBasePackages() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
Class<?>[] scanBasePackageClasses() default {};
}
@SpringBootApplication是⼀个复合注解
查看源码,可以发现@SpringBootApplication是⼀个复合注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration和@ComponentScan三个注解。
对这三个注解进⾏逐⼀解析:
@SpringBootConfiguration
@SpringBootConfiguration继承⾃@Configuration,⼆者的功能也⼀致,⽤于标注当前类是配置类,并且会将当前类内声明的⼀个或多个以@Bean注解标记的⽅法的实例纳⼊到Spring容器中,且实例名就是⽅法名。
@SpringBootConfiguration和@Configuration都可以理解为Spring传统XML配置⾥的<beans>标签,⽽@Bean则是<bean>标签。
@Configuration和@Bean并不是Spring Boot的特有标签,普通的Spring项⽬也可以使⽤,只是普通的Spring项⽬在使⽤⼤多数注解的时候要扫包才能⽣效,要注意加上扫包配置<context:component-scan base-package="" />。⽽Spring Boot只需要保证启动启动main⼊⼝在这些类的上层包就⾏,不需要特别加上扫包配置。
Spring传统XML配置:
<beans>
<bean id="car" class="com.yanggb.Car">
<property name="wheel" ref="wheel"></property>
</bean>
<bean id="wheel" class="com.yanggb.Wheel"></bean>
</beans>
Spring新型注解配置:
@Configuration // 相当于<beans>
public class CarConfig {
@Bean // 相当于<bean>
public Car car() {
Car car = new Car();
car.setWheel(wheel()); // 相当于<property>
return car;
}
@Bean
public Wheel wheel() {
return new Wheel();
}
}
两种⽅式最后产⽣的结果是相同的。
@EnableAutoConfiguration
@EnableAutoConfiguration的作⽤是启动⾃动配置,意思是Spring Boot会根据你添加的jar包来配置你项⽬的默认设置,⽐如你添加了Spring Boot提供的spring-boot-starter-web依赖,其中包含了Tomcat和Spring MVC,这个注释就会假设你正在开发⼀个Web应⽤程序,⾃动地帮你添加Web项⽬中所需要的Spring配置。
@ComponentScan
@ComponentScan的作⽤是扫描当前包及其⼦包下被@Component注解标记的类并纳⼊到Spring容器中进⾏管理。是Spring传统XML配置的
<context:component-scan>的替代。
@Controller,@Service,@Repository是@Component的⼦注解,所以也会被@ComponentScan扫描并做和@Component相同的处理。
@ComponentScan提供了basePackage参数定义要扫描的包,如果不设置,默认会扫描包的所有类,即默认扫描**/*.class路径,建议加上该参数以减少加载的时间。
@SpringBootApplication提供的参数
exclude
exlude参数继承⾃@EnableAutoConfiguration注解的同名参数,根据class来排除特定的类加⼊Spring容器,传⼊参数的value类型是class类型数组。
@SpringBootApplication(exclude = {Good.class, Bad.class})
excludeName
exludeName参数继承⾃@EnableAutoConfiguration注解的同名参数,根据className来排除特定的类加⼊Spring容器,传⼊参数的value类型是class的全类名字符串数组。
@SpringBootApplication(excludeName = {"Good", "Bad"})
exclude和excludeName可以⽤来关闭指定的⾃动配置,⽐如关闭数据源相关的⾃动配置。
scanBasePackages
scanBasePackages参数继承⾃@ComponentScan注解的basePackages参数,指定要扫描的包,传⼊参数的value类型是包名的字符串数组。
@SpringBootApplication(scanBasePackages = {"", ""})
scanBasePackageClasses
scanBasePackageClasses参数继承⾃@ComponentScan注解的basePackageClasses参数,指定要扫描的包,传⼊参数的value类型是包名的字符串数组。@SpringBootApplication(scanBasePackageClasses = {Good.class, Bad.class})
"到后来,我们只是会说对此⽆能为⼒。"

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。