springboot2核心技术图
1.spring到底能做什么
spring特色服务
1.Microservices(微服务开发):在整个项目中,把整个应用的所有功能拆分成一个一个微小的功能模块,每一个微小的功能模块我
们称之为微服务。
2.Reactive(响应式编程):通过整个应用之间构建一个异步数据流的方式,异步数据流允许我们占用少量的线程,包括少量的cpu
或者内存资源,构建一个高吞吐量的应用
3.Cloud(分布式云开发)
4.Web apps(web开发):使用springmvc来开发一个web应用,发请求,返回json数据等功能都可以实现。
5.Serverless(无服务开发,函数式服务):也就是Function as a Servic,无需购买服务器。
6.Event Driven(事件驱动):可以将整个的分布式系统来构建出一个实时的数据流,称为streaming Data
7.Batch(批处理业务)
springboot生来的意义:简化配置地狱,由于spring的环境问题,在我们应用spring开发的时候会遇到很多繁杂的配置问题,
springboot生来的意义就是来解决配置问题。
springboot是一个高层框架,他的底层是一个Spring Framework
springboot2相较于springboot1引入了响应式编程,无论是sql还是Nosql还是web开发,还是数据库,或者说安全开发,或者说进行兼容servlet的开发,springboot引入了两套方案,第一套使我们的servlet的技术栈,即spring,springmvc的一系列,第二套是我们从数据访问这层开始,通过构建异步数据流的方式,进行响应式开发。响应式开发可以通过占用少量的线程或者内存资源来处理大量的并发问题。
为什么使用springboot:使得创建一个生产级别的spring的应用变得简单,我们要做的就是让这个应用运行起来。
springboot的优点: 1.创建独立spring应用:springboot可以创建spring的应用
2.内嵌web服务器:tomcat,jetty等服务器已经在内部配置完成。之前开发的应用会被打成一个war包放到服
务器上,现在直接运行就可以了。
3.自动依赖starter依赖,简化构建配置:springboot配置了start这样的启动器,不用进行导入jar包,只需要导
入一个场景,比如web-starter,这样springmvc就可以导入进来我们所需要的包,并且控制好版本。
4.自动配置spring以及第三方功能:不用进行配置,可以上手直接开发应用逻辑
5.提供生产级别的监控,健康检查以及外部优化:
6.无需代码生成,无需编写xml技术
springboot是整合spring技术的一站式框架
springboot的缺点:迭代过快,需要时刻关注变化
分布式的困难:远程调用,服务发现,负载均衡,服务容错,配置管理,服务监控,链路追踪,日志管理,任务调度。
Springboot中还是使用了在SpringMVC中出现的新注解,说明这个注解很重要,要仔细的看
@Controller+@ResponseBody=@RestController 意味每个类的返回值都是直接返回给浏览器的,而不是返回给某个页面
SpringApplication.run:运行后面参数用的是MainApplication.calss是主程序,就是要把主程序跑起来。后面传入了rags参数,还没讲是用来干什么的,要往后继续看才知道。
主程序的作用是用来引导springboot的启动。核心在于使用SpringbootApplication注解,告诉这是一个springboot应用
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
}
springboot中的一站式配置文件:application.properties
这个配置文件只需要写在resource中,就可以通过这一个文件更改所有你想改的配置
springboot可以使用插件直接把程序打包成一个jar包,这个jar包中自带了整套的运行环境,可以直接运行,可以放在目标服务器运行。
插件:
org.springframework.boot
spring-boot-maven-plugin
当使用cmd运行springboot的jar包时,记得把属性中的快速编辑取消,否则容易运行不成功。
springboot特点:1.1依赖管理
父项目做依赖管理:只要子项目继承了父项目相应的依赖,子项目以后写依赖就不需要版本号了。
父项目中几乎声明了所有开发中常用的版本号
就近优先原则: 当前项目中如果配置了版本号,则使用当前项目中的,否则使用父项目中的版本号。
好用的找maven的仓库:mvnrepository搜索,下图点进入查询你想要的版本,然后到你的pom文件中,
<mysql.version>5.1.43</mysql.version>
进行类似的重写即可,本例为mysql连接数据库的版本号更改。
spring-boot-starter-*
starter:一组集合的依赖描述,一般只要引入一个start,那么一个项目的完整开发结构就被引入了。所有的一来就都进来了。
starter可以再官网中查询到,并且springboot支持你自定义starter。
*-spring-boot-starter:第三方提供的starter。
通过分析依赖树可以查询到你都导入了什么依赖。
自动配置:
自动配号Tomcat
引入Tomcat依赖
配置tomcat
自动配好MVC
引入SpringMVC全套组件
自动配好SpringMVC常用组件
自动配好web常见功能 eg:字符编码功能
SpringBoot帮我们配好了所有web开发的常见场景
默认的包结构:
主程序所在包及其下面的所有子包里面的组件都会被默认扫描过来(必须和主程序是一个包或者在主程序下面的包,要不然不
扫描)
想要改变扫描路径,在@SpringbootApplication(scanBasePackages=“com.atguigu”)中改变scanBasePackages属性,此属
性是默认扫描包属性。
各种配置拥有默认值
默认配置最终都是映射到MultipartProperites
配置文件的值最终都会绑定到某个类上,这个类会在容器中创建。
按需求加载各种自动配置项。
springboot的底层注解运用
配置类中写:
1.@Configuration:组件添加,简化了需要进行配置bean的步骤
添加一个类就相当于添加了一个bean,@Configuration相当于spring中的配置文件,@Bean相当于spring中的bean标签,@Bean下的类,方法名就是组件的id,返回类型就是组件类型,返回值就是创建的实例(保存的对象)。和spring相同的是,默认是set注入,所以需要写有参函数。
组件名默认是方法名,如果想自定义组件名,可以用@Bean(“自定义名称”);
配置类里面使用@Bean注解给容器注册的组件,默认是单实例的。
配置类本身也是一个组件。
proxyBeanmethod:代理bean的方法,在@Configuration中默认是ture。
外部无论对配置类中的这个组件注册方法调用多少次,获取的都是之前注册容器中的单实例对象。
默认逻辑是,如果@Configuration中proxyBeanmethod是ture。那么这个类获取的就是代理对象,那么springboot就会检查容器中有没有这个方法已经返回的组件,如果有,就调用有的,如果没有,再来调用新创的。
springboot总会检查这个组件是否在容器中有,保持组件单实例,但是如果让proxyBeanmethod=false,那么就不会获取代理对象
Configuration在底层的两个配置:1.full配置(proxyBeanmethod=ture) 2.lite配置(proxyBeanmethod=false)
当full配置时,我们在外面调用配置类里面给容器注册的方法都会去容器中找组件,
当lite配置时,在容器中则不会保存代理对象在面外每一个调用配置类里面给容器注册的方法每一次都会产生一个新的对象。
用来解决组件依赖。
如果给容器中只是单单注册组件,别人也不进行依赖的话,我们一般都把proxyBeanmethod调成flase,因为这样会让springboot的启动过程加快很多,加载也会变快。但是如果要进行依赖的话,则要把proxyBeanmethod调成true,这样才能保证他依赖的组件就是容器中的组件。
@Import()注解
可以向容器中导入组件。
将指定类型的组件导入进去,import可以自动的给容器中创建调用其中组件的无参构造器,创建出指定类型的组件的对象放在容器中。默认组件的名字就是全类名。
@Conditional注解
条件装配:满足@Conditional中的条件,则进行组件注入
ConditionalOnBean当容器中存在指定的Bean的时候才进行注入
ConditionalOnMissingBean当容器中不存在指定的Bean的时候才进行注入
containsBean函数:获取容器中的组件。
条件注解也可以加在方法上,这样当你不满足条件的时候,方法里面的所有语句都不执行。条件注解加在类上同理。
@ImportResource注解
当有老版本的配置文件,或者原生的配置文件你不想一个一个对应的进行整改,springboot提供了一个方法,就是@ImportResource(对应的文件),这样springboot会直接帮你进行解析然后识别。
@ConfigurationProperties注解
不能只在类中添加@ConfigurationProperties,这样是没有添加到容器中的,必须用@Component(一般用法是把pojo类转换为bean对象)
在配置类中写一个@EnableConfigurationProperties可以代替@ConfigurationProperties的功能,开启了属性配置功能。传入你想要绑定的类的.class文件
在配置文件中写这个注解。
@EnableConfigurationProperties的作用:
1.开启你想要的类的配置绑定功能。
2.把car这个组件自动注册到容器中
@EnableConfigurationProperties多用于你想要的类是第三方的包,你不能进行改动给的情况下。
想要pojo类中的属性配置生效,必须得开启car的属性配置功能。
下图为属性配置。
@Congifuration注解:代表当前是一个配置类
@ConponentScan注解:指定要扫描那些东西。
@EnableAutoConfiguration
其中主要注解为:
1.@AutoConfigurationPackage
2.@Import({AutoConfigurationImportSelector.class})
@AutoConfigurationPackage
1.其中的Registrar是用来批量注册组件的。用import一个一个导入过于麻烦。就可以利用Registrar来批量注册。
2.将指定的一个包下的所有的组件导入进来。主要是MainApplication所在包下。
3.由此可以解释为什么@SpringbootApplication默认的包路径是main所在的包。
在Registrar中,AnnotationMetadata代表了注解的原信息,由于@EnableAutoConfiguration在@SpringbootApplication中,所以一般的注解的原信息代表了在@SpringbootApplication下面的类。
通过注解的原信息来拿到包名,然后封装到系统中,从而将某个包里面的组件进行批量注册。
@Import({AutoConfigurationImportSelector.class})
主要是利用getAutoConfigurationEntry(annotationMetadata),给容器中批量导入一些组件。
尚硅谷第十四课还没看完记得看。