在java开发领域,对spring家族一定不会陌生,也一定不能陌生。
从时间上出现的先后关系为,最早到至今:
spring、springMvc、springBoot、springCloud
从依赖上互相之间的关系为,自低向上:
spring
spring是一站式的java开发框架,采用容器化管理,创建各种bean实例,并维护着bean与bean之间的关系。
spring的设计理念是无侵入、简单,可以让普通的javaBean对象实现各种功能,换种说法是在sping中,一切皆组件(javaBean)。
3个核心内容
IOC(Inversion of Control):控制反转
DI(Dependency Injection):依赖注入
AOP(Aspect Oriented Programming):面向切面编程
2个概念
容器
组件
spring中如何进行对象的实例化,各个实例又交给谁?
sping框架借助反射帮助我们创建对象实例化,然后放到spring容器中,底层就是用的ConcurrentHashMap作为容器管理所有的对象。
创建一个spring.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.spring.demo.User">
<property name="name" value="caocao"/>
<property name="age" value="20"/>
<property name="address" ref="bj"/>
</bean>
</beans>
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
User user = (User) context.getBean("user");
System.out.println(user);
}
springMvc
springMvc专门解决前台页面与后端数据处理之间的映射关系,是sping的web框架。
通过Dispatcher Servlet、ModelAndView和View Resolver,使得开发web应用变得容易,主要是对带页面的系统开发,URl路由、Session、模板引擎、静态资源等。
springBoot
spring配置复杂,xml文件中大量的bean定义,开发繁琐,由于微服务的兴起,统一后端框架,springBoot出现在大家面前。
springBoot提供丰富的注解,同时将Servlet容器集成到框架中,如Tomcat、Jetty等。
springBoot默认约定大于配置,设计了Starter和AutoConfiguration机制,简化配置流程,通过简单引入jar包快速局部组件集成能力,提高开发效率。
springBoot框架相对于springMvc框架,更专注于后端接口,不开发前端页面,虽然和前端解耦,但也可以做前后端一起开发,主流推崇前后端分离。
常用组件如:
spring-boot-starter:核心启动器,包含了自动配置、日志和YAML
spring-boot-starter-web:构建Web应用,使用 Tomcat 作为内嵌容器
springCoud
分布式时代,系统间需要打通、组成集群,从而具备更大的吞吐能力。将一个单体项目拆分成多个微服务,各个微服务之间打通、相互协调,从而完成全流程服务。
springCloud将多个springBoot单体应用整合、管理,组成一系列框架的有序集合。关注于微服务整合、管理的服务治理、提高丰富的组件框架,如
服务注册与发现:Eureka
服务间调用:openFeign
负载均衡:ribbon
网关:zuul/gateway
配置中心:config
断路器:hystrix