目录
概述:
- 简化spring应用开发的一个框架
- 整个spring技术栈的一个大整合
- J2EE开发的一站式解决方案
1.什么是springboot
- SpringBoot是Spring家族中的一个子工程
- 快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,让我们关注与业务而非配置。
- 让我们写更少的代码!
2.为什么要学习SpringBoot
java一直被人诟病的一点就是臃肿、麻烦。当我们还在辛苦的搭建项目时,可能Python程序员已经把功能写好了,究其原因注意是两点:
-
一个是复杂的配置,需要些大量的配置,这就需要大量的代码!让整个项目看着一点都不优雅!
-
一个是混乱的依赖管理。决定项目里要用哪些库就已经够让人头痛的了,主要是依赖版本之间的冲突,这难题实在太棘手。并且,依赖管理也是一种损耗
而SpringBoot让这一切成为过去!
Spring Boot 简化了基于Spring的应用开发,只需要“run”就能创建一个独立的、生产级别的Spring应用。Spring Boot为Spring平台及第三方库提供开箱即用的设置(提供默认设置,存放默认配置的包就是启动器starter),这样我们就可以简单的开始。多数Spring Boot应用只需要很少的Spring配置。
我们可以使用SpringBoot创建java应用,并使用java –jar 启动它,就能得到一个生产级别的web工程。
3.SpringBoot的特点
- 快速创建独立运行的spring项目以及主流框架集成
- 使用嵌入式的servlet容器,应用无需打成war包,可以打成jar包以java -jar xxx.jar的命令运行项目
- starters自动依赖与版本控制
- 大量自动化配置简化开发,也提供入口修改默认配置
- 无需xml,无代码生成
- 准生产环境的运行时应用监控
- 与云计算的天然集成
4.缺点
入门容易精通难
5.SpringBoot自动配置的原理
1.我们需要要使用springboot首先需要引入springboot父类工程
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
2.我们开发一个web项目需要引入一个web启动类springboot会给我们自动配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
启动类 这个类放在靠前的包下
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
springboot的运行原理:
-
注解:@SpringBootApplication 启动类上的注解相当于@ComponentScan、@EnableAutoConfiguration、@SpringBootConfiguration这三个注解
进入@SpringBootApplication 注解上有三个注解
-
1)@ComponentScan(扫描spring组件注解)
扫描spring组件的注解,如果不配置属性的话他会扫描所在包以及子包,所以一般我们会将启动类放在靠前的包下
-
2)@EnableAutoConfiguration(开启自动配置类注解)
SpringBoot内部对大量的第三方库或Spring内部库进行了默认配置,这些配置是否生效,取决于我们是否引入了对应库所需的依赖,如果有那么默认配置就会生效。
-
3)@SpringBootConfiguration(声明是springBoot的配置类)
进入这个注解发现这个注解上有一个@configuration注解,是声明这是一个配置类的意思,spring会自动扫描添加了@configuration的类 所以我们要把启动类放在最前面的包!因为他默认扫描本包和本包以下的所有子包中的spring组件!
小结:SpringBoot为我们提供了默认配置,而默认配置生效的条件一般有两个:
-
1)引入了相关依赖 (web项目,就需要引入web启动器,这样springboot内部会做出判断,这样自定义配置就会生效)
-
2)你自己没有配置Bean(比如数据源DataSource)如果spring扫描到你自己注入了,他就不会启动默认的数据源连接池
所以,我们如果不想配置,只需要引入依赖即可,而依赖版本我们也不用操心,因为只要引入了SpringBoot提供的stater(启动器),就会自动管理依赖及版本了。
因此,玩SpringBoot的第一件事情,就是找启动器,SpringBoot提供了大量的默认启动器
全局配置:
另外,SpringBoot的默认配置,都会读取默认属性,而这些属性可以通过自定义
application.properties
文件来进行覆盖。这样虽然使用的还是默认配置,但是配置中的值改成了我们自定义的。因此,玩SpringBoot的第二件事情,就是通过
application.properties
来覆盖默认属性值,形成自定义配置。我们需要知道SpringBoot的默认属性key,非常多.属性文件支持两种格式,application.properties和application.yml
yml的语法实例:
jdbc: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/xxx username: root password: root server: port: 80
-
注解积累
@Configuration 声明配置类
@Bean 注入实体 在配置类中注入bean方法上使用 value属性指定注入bean的id
@ConfigurationProperties(prefix = "person") 将配置文件中的属性值映射到类上,在实体类上使用prefix 前缀
@ImportResource(value = {"classpath:xmlFile/*.xml"}) 指定spring xml 配置文件地址 在配置类上使用
扩展
设置自定义yml文件位置在配置类声明
/**
* 设置自定义yml位置
*
* @return
*/
@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer();
YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
yaml.setResources(
new ClassPathResource[] {
/** 例子 */
new ClassPathResource("config/person.yml")
});
pspc.setProperties(yaml.getObject());
return pspc;
}