JAVA培训-核心概念
1. SpringBoot
1.1 理清概念(Spring、SpringMvc、SpringBoot、SpringCloud)
1、Spring
Spring是一个开源容器框架,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean之间的关系。其核心就是控制反转(IOC),和面向切面(AOP),简单的说就是一个分层的轻量级开源框架。
Spring 框架就像一个家族,有众多衍生产品例如 boot、security等等。但他们的基础都是Spring 的 ioc和 aop。ioc 提供了依赖注入的容器;aop 解决了面向横切面的编程
概念补充
控制反转(IOC):不是什么技术,而是一种设计思想,在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制
传统程序设计如图,都是主动去创建相关对象然后再组合起来
当有了IoC/DI的容器后,在客户端类中不再主动去创建这些对象了
所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢,举个简单的例子,你是如何找女朋友的?常见的情况是,你到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好、qq号、电话号、ip号、iq号………,想办法认识她们,投其所好送其所要……这个过程是复杂深奥的,必须自己设计和面对每个环节。传统的程序开发也是如此,在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象销毁(比如Connection等),对象始终会和其他的接口或类藕合起来。
那么IoC是如何做的呢?有点像通过婚介找对象,在你和女朋友之间引入了一个第三者:婚姻介绍所。婚介管理了很多男男女女的资料,你可以向婚介提出一个列表,告诉它你想找个什么样的女(男)朋友,比如身高、三维、职业等,踢球技术像梅西之类的,然后婚介就会按照你的要求,提供一个mm,你只需要去和她谈恋爱、结婚就行了。简单明了,如果婚介给你的人选不符合要求,你就会抛出异常。整个过程不再由我自己控制,而是有婚介这样一个类似容器的机构来控制。Spring所倡导的开发方式就是如此,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。
面向切面(AOP):指扩展功能不修改源代码,将功能代码从业务逻辑代码中分离出来。
主要功能:日志记录,性能统计,安全控制,事务处理,异常处理等等。
主要意图:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
AOP特点:采用横向抽取机制,取代了传统纵向继承体系重复性代码。
AOP底层实现:AOP底层使用动态代理实现
2、SpringMVC
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。SpringMVC是一种web层mvc框架,用于替代servlet(处理|响应请求,获取表单参数,表单校验等。Spring MVC提供了一种轻度耦合的方式来开发web应用。Spring MVC是Spring的一个模块,是一个web框架。
注(mvc(mode view controller):m指业务代码,v指用户界面,c是控制器;是一种软件设计模式;用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。)
3、SpringBoot
Springboot是一个微服务框架,延续了spring框架的核心思想IOC和AOP,简化了应用的开发和部署。Spring Boot是为了简化Spring应用的创建、运行、调试、部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置。提供了一堆依赖打包,并已经按照使用习惯解决了依赖问题 -->默认大于配置的理念。
Spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务
4、SpringCloud
SpringCloud一套目前完整的微服务解决框架,功能非常强大,注册中心,客户端调用工具,服务治理(负载均衡,断路器,分布式配置中心,网关,消息总线等)
springboot和springcloud的区别
springboot和springcloud的区别主要是:
1.作用不同;前者的作用是为了提供一个默认配置,从而简化配置过程;后者的作用是为了给微服务提供一个综合管理框架。
2.使用方式不同;前者可以单独使用;springcloud必须在springboot使用的前提下才能使用。springboot和springcloud都是从spring生态圈中衍生出来的软件开发框架,但是二者的创作初衷是完全不同的,springboot的设计目的是为了在微服务开发过程中可以简化配置文件,提高工作效率,而springcloud的设计目的是为了管理同一项目中的各项微服务,因此二者是完全不同的两个软件开发框架。
所以,用最简练的语言概括就是:
Spring 是一个“引擎”;
Spring MVC 是基于Spring的一个 MVC 框架 ;
Spring Boot 是基于Spring4的条件注册的一套快速开发整合包。
spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然也就包含spring mvc。
SpringCloud一套目前完整的微服务解决框架
因此他们的关系大概就是这样:spring mvc < spring < springboot < spring cloud。
总结:
Spring MVC是基于 Servlet 的一个 MVC 框架主要解决 WEB 开发的问题,因为 Spring 的配置非常复杂,各种XML、 JavaConfig处理起来比较繁琐。
于是为了简化开发者的使用,从而创造性地推出了Spring boot,约定优于配置,简化了spring的配置流程。
说得更简便一些:Spring 最初利用“工厂模式”(DI)和“代理模式”(AOP)解耦应用组件。
大家觉得挺好用,于是按照这种模式搞了一个 MVC框架(一些用Spring 解耦的组件),用于开发 web 应用( SpringMVC )。
然后又发现每次开发都写很多样板代码,为了简化工作流程,于是开发出了一些“懒人整合包”,这套就是 Spring Boot。
1.2 Spring Boot的核心功能
1、 可独立运行的Spring项目:Spring Boot可以以jar包的形式独立运行。
2、 内嵌的Servlet容器:Spring Boot可以选择内嵌Tomcat、Jetty或者Undertow,无须以war包形式部署项目。
3、 简化的Maven配置:Spring提供推荐的基础 POM 文件来简化Maven 配置。
4、 自动配置Spring:Spring Boot会根据项目依赖来自动配置Spring 框架,极大地减少项目要使用的配置。
5、 提供生产就绪型功能:提供可以直接在生产环境中使用的功能,如性能指标、应用信息和应用健康检查。
6、 无代码生成和xml配置:Spring Boot不生成代码。完全不需要任何xml配置即可实现Spring的所有配置。
主要目标是:
为所有Spring开发提供一个更快,更广泛的入门体验。
提供大型项目(如嵌入式服务器,安全性,指标,运行状况检查和外部配置)通用的一系列非功能性功能。