1.Spring与SpringBoot区别
2.创建SpringBoot项目
2.1 通过maven的方式创建
2.1.1 maven设置
给maven 的settings.xml配置文件的profiles标签添加
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
2.1.2 创建一个maven工程,导入springboot依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2.1.3 编写一个主程序;启动Spring Boot应用
/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
// Spring应用启动起来
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
2.1.4 编写相关的Controller、Service
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "Hello World!";
}
}
运行主程序测试
2.2 通过spring initializr向导创建
2.3 通过官网下载导入
3.简化部署
要创建可执行jar,我们需要将spring-boot-maven-plugin
添加到pom.xml。
<!-- 这个插件,可以将应用打包成一个可执行的jar包;-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
将这个应用打成jar包,直接使用java -jar的命令进行执行;
4.导入配置文件处理器
导入后编写配置文件就会有提示了
<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
其实这个配置文件处理器只是在编写的时候起到提示作用,在打包运行时并不需要,所以为了不必要的类,可以再添加如下配置来排除
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
5.容器功能
5.1 组件添加
5.1.1 使用@Configuration添加组件
不用beans.xml的配置文件方式向容器中添加bean,而是使用配置类的方式
1.配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的;
2. 配置类本身也是组件
3. proxyBeanMethods : 代理bean的方法
Full(proxyBeanMethods = true) ----全模式
【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
Lite(proxyBeanMethods = false) ----轻量模式
【每个@Bean方法被调用多少次返回的组件都是新创建的】
- @Configuration(proxyBeanMethods=true) : 默认是true,表示配置类在容器中是以代理对象的方式存在的; bean是代理对象创建的;(代理对象每次都会在容器中找bean,有就拿,没有就创建)
- Full: 配置列之间有依赖关系,方法会调用得到单实例组件,用Full模式
- Lite : 配置类之间无依赖关系,加速容器启动过程,(不需要判断);
5.1.2 使用@Controller,@Service,@Repository,@Component
5.1.3 使用@ComponentScan、@Import
这两个注解标注在容器中的组件类上
@Import
: 可以导入第三方组件
5.1.4 @Conditional 满足指定条件才能装配
5.1.5 @ImportResource 导入资源
@ImportResource("classpath:beans.xml") //导入spring的配置文件
5.2 配置绑定
5.2.1 @ConfigurationProperties
组要配合@Component
注解组合(必须将组件放进容器中)
@Component //只有在容器中的组件才会拥有spring提供的功能
@ConfigurationProperties(prefix = "mycar")
public class Car {
private String name;
private Double price;
...
}
mycar.price=1000
mycar.name=byd
5.2.2 @ConfigurationProperties+ @EnableConfigurationProperties
这种组合必须放在配置类上,因为配置类属于容器中的组件;
@EnableConfigurationProperties的作用:1.开启组件的配置绑定功能;2.把组件注册到容器中
所以这种方式组件上不在需要标注@Component也会被容器管理;
//@Component //只有在容器中的组件才会拥有spring提供的功能
@ConfigurationProperties(prefix = "mycar")
public class Car {
private String name;
private Double price;
...
}
//配置类
@Configuration
@EnableConfigurationProperties(Car.class) //开启Car的配置绑定功能;把Car注册到容器中
public class MyConfig {
}
6.自动配置原理
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
}
6.1 引导加载自动配置类
@SpringBootApplication
==>
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication{
}
6.1.1 @SpringBootConfiguration
: 这个注解底层是@Configuration
,所以它的作用代表主程序启动类是一个配置类;
6.1.2 @ComponentScan
: 指定扫描哪些
6.1.3 @EnableAutoConfiguration
:
@AutoConfigurationPackage
@Import({
AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
6.1.3.1 @AutoConfigurationPackage(自动配置包)
@Import({
Registrar.class})
public @interface AutoConfigurationPackage {
底层给容器导入了一个Registrar
组件,利用Registrar给容器导入了一系列组件(将指定包下的所有组件导入进来(Main程序所在包))