这里只对主程序作简单分析,那个自动配置Auto原理留到后面来说,因为那是最SpringBoot最核心的知识!!!
分析主程序SpringbootWebApplication.java,我这个是SpringBoot自带生成的
package com.xue.springbootweb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootWebApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootWebApplication.class, args);
}
}
1、这里关键是@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 {
2、重要的就是@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注解,可以说这三个注解替换掉@SpringBootApplication也可以启动web项目,所以@SpringBootApplication完全由这是三个注解组成
3、@SpringBootConfiguration点进去发现是由@Configuration注解组成,这个注解说明这是一个配置类(主程序类是一个配置类)
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}
4、@EnableAutoConfiguration这个注解标注,表示开启自动配置功能,以前我们需要配置的东西,Spring Boot帮我们自动配置(以前是xml配置)。这里面的文章我就不深入了,这个就是SpringBoot的核心,这里提一下自动配置功能研究重点是@AutoConfigurationPackage 、@Import({AutoConfigurationImportSelector.class})
总之@EnableAutoConfiguration的作用就是开启自动配置功能,将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器
@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 {};
}
5、@ComponentScan的作用是将@SpringBootApplication标注的类的包中所有子包里面的所有组件扫描到Spring容器,也可以说告诉Spring从哪里找到组件(@Component或@Service或@Repository或@Controller等标注的类就是组件)
转载:https://blog.csdn.net/qq_41055045/article/details/101632851