参考文章来源: 来源网址:http://www.cnblogs.com/hafiz
原文地址:https://www.cnblogs.com/hafiz/p/9131264.html
1. 通过向导生成的Application代码:这是一切的源头。
@SpringBootApplication
public class ThleafdemoApplication {
public static void main(String[] args) {
SpringApplication.run(ThleafdemoApplication.class, args);
}
}
2. 和普通java程序的启动类相比有如下不同:
- 调用了一个SpringApplication的静态方法run:并传递自身的class对象 。传递class,通常就是为了后期反射使用,可以读取类的一切信息。
- 多了一个@SpringBootApplication注解,这个注解可以通过被传递进run方法的class对象解读
3. @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 {
...
}
由@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan三个注解组成:
4. @SpringBootConfiguration:和@Configuration注解一样,就是指名这个类是一个JavaConfig类
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}
可以把SpringBoot的启动类分为两个类就更容易理解:
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class DemoConfiguration {
}
//分割线
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoConfiguration.class, args);
}
}
所以:启动类DemoApplication其实就是一个标准的Standalone类型的Java程序的main函数启动类
5. @EnableAutoConfiguration: 就是该注解借助@Import
注解的支持,Spring的IoC容器收集和注册特定场景相关的Bean定义