欢迎各位大佬拍砖
在这里,我也来凑热闹写个关于Spring Boot的系列文章
我们要讨论Spring Boot,将首先需要了解Spring对Spring Boot的支持:
Java配置是Spring4.x推荐的配置方式,完全可以替代xml配置。它是通过@Configuration和@Bean这2个注解实现的。
- @Configuration作用于类上,相当于一个xml配置文件
- @Bean作用于类上,相当于xml配置文件中的。通过该注解默认为把方法名作为bean的id
Spring Boot的引入
如果要引入Spring Boot有2种方式,这2种方式都是写在pom.xml中的
- 通过继承Spring Boot提供的GAV
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>
- 通过dependencyManagement 标签引入
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
Spring Boot的入口
Spring Boot的入口是一个标注了@SpringBootApplication的类,这个类一般情况下是有个main()方法。通过查看源码我们知道,@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 {
Class<?>[] exclude() default {};
String[] excludeName() default {};
String[] scanBasePackages() default {};
Class<?>[] scanBasePackageClasses() default {};
}
- @ComponentScan标注了扫描路径(默认是含有@SpringBootApplication的路径)
- @SpringBootConfiguration是一个继承了@Configuration的注解类,也就说标注了 @SpringBootConfiguration的类可以当做一个配置类。@SpringBootConfiguration的效果和@Configuration是一样的,唯一不同的是前者是Spring Boot提供的注解,后者是Spring提供的注解。
@EnableAutoConfiguration会在后面讲解
除了要在入口类标注@SpringBootApplication注解外,一般还需要一个main方法
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
我们点击SpringApplication.run(OrderApplication.class, args),查看org.springframework.boot.SpringApplication的源码可以看到下面的代码
public static ConfigurableApplicationContext run(Object source, String... args) {
return run(new Object[] { source }, args);
}
也就是说run()会将第一个参数作为源进行加载。
除了了使用SpringApplication.run()这个静态方法来启动Spring Boot外,还可以使用
SpringApplication application = new SpringApplication();
Set<Object> set = new HashSet<>();
set.add(OrderApplication.class);
application.setSources(set);
application.run(args);
这种方式来启动Spring Boot。这种方式可以指定多个源。