摘要:本文重点讲解spring boot中的 @SpringBootApplication注解、spring boot 自动装配、spring boot组合注解使用以及说明
@SpringBootApplication注解说明
@SpringBootApplication注解的定义如下所示:
package org.springframework.boot.autoconfigure; import java.lang.annotation.Annotation; import java.lang.annotation.Documented; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Target({java.lang.annotation.ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @Configuration @EnableAutoConfiguration @ComponentScan public @interface SpringBootApplication { Class<?>[] exclude() default {}; String[] excludeName() default {}; }
@SpringBootApplication是spring boot框架中的核心注解,通过上面的代码可以看出他是一个组合注解。组合的注解有:@Configuration、@EnableAutoConfiguration、@ComponentScan。因此如果我们不直接使用@SpringBootApplication注解,则可以直接使用@Configuration、@EnableAutoConfiguration、@ComponentScan三个注解。
直接使用@SpringBootApplication注解
比如直接使用@SpringBootApplication注解如下所示:
@RestController @SpringBootApplication public class Application { @RequestMapping("/") String index() { return "xxxxxxxxxxxxx"; } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
使用组合注解代替@SpringBootApplication注解
或者直接使用组合注解如下所示:
@RestController @Configuration @EnableAutoConfiguration @ComponentScan public class Application { @RequestMapping("/") String index() { return "xxxxxxxxxxxxx"; } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
上述的两个代码是等价的。只是直接使用@SpringBootApplication比较简洁方便。
组合注解说明
@EnableAutoConfiguration注解:让spring boot框架根据类路径下面的jar包依赖为当前的项目工程自动注入依赖的类,说白了就是自动配置。
比如,我们项目引入了spring-boot-starter-web模块,则spring boot框架会自动添加tomcat以及spring mvc的依赖。并对tomcat以及spring mvc自动装配。
spring boot会自动扫描@SpringBootApplication所在类的同级包以及子包。
关闭自动配置
通过上面的讲解可以知道,要想关闭spring boot 中的自动配置只需要使用spring boot中@SpringBootApplication中的exclude参数即可,如下所示:
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})