来自狂神的笔记截图
spring 的目的是为了解决企业级开发的复杂性而创建的,简化开发
约定大于配置
微服务架构的四个核心问题
1. 服务很多,客户端怎么访问?
2.这么多服务?服务之间如何通信?
3.这么多服务,如何治理?
4.服务挂了怎么办?
解决方案:
sprind cloud 生态!解决上面的问题
spring boot 构建项目,springcloud 协调
万变不离其宗
1.API(网管,服务路由的问题)
2.Http rpc (网络通信问题)
3.注册和发现(高可用)
4.熔断问题(服务降级,雪崩问题)
问题根源,网络不可靠
微服务与微服务架构
微服务:强调的是服务的大小,他关注的是某一个点,还是解决具体某一个问题/提供对应服务的一个服务应用,狭义的看,可以看成一个model
微服务架构:是一种新的架构形式
1:什么是IOC
1.1 什么是ioc:控制反转:把对象的创建和对象之间的调用过程交给spring进行管理
1.2 ioc的目的:进行解耦
2:IOC的底层原理
2.1xml解析;工厂模式;反射
2.2:ioc如何实现:底层就是使用的对象工厂进行创建对象
3.Spring提供IOC容器实现两种方式:(两个接口)
3.1:BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员使用,
在加载配置文件的时候不会创建对象,在获取对象(使用)才去创建对象
3.2:ApplicationContext:BeanFactory的子接口,提供更多更强大的功能,一般由开发人员进行使用,加载配置文件时候创建对象
4.IOC操作Bean管理
1.什么是Bean管理指的是两个操作
1.1:spring 创建对象
1.2:Bean注入属性
2.Bean管理的两种实现方式
2.1:基于xml配置文件方式实现
2.2:基于注解方式实现
3.1基于xml方式创建对象
<bean id="user" class="com.hu.spring5.User"></bean>
3.2:基于xml方式注入属性
<bean id="book" class="com.hu.spring5.Book" >
<!-- set方式注入属性 property完成属性注入-->
<property name="name" value="eee"></property>
</bean>
<!-- 有参构造注入属性-->
<bean id="orders" class="com.hu.spring5.Orders" >
<constructor-arg name="name" value="123"></constructor-arg>
</bean>
DI:依赖注入,就是注入属性
4.1注入属性-外部bean
4.2注入属性内部bean和级联赋值
<!-- 级联赋值-->
<bean id="emp" class="com.hu.bena.Emp">
<property name="dept" ref="dept"></property>
<property name="dept.dname" value="研发部"></property>
<property name="ename" value="小名"></property>
<property name="gender" value="男"></property>
</bean>
<bean id="dept" class="com.hu.bena.Dept">
<property name="dname" value="开发部"></property>
</bean>
5.1xml注入集合属性
5.11:注入数组类型属性
5.1.2:注入List集合类型属性
5.1.3:注入Map集合类型属性
<bean id="student" class="com.hu.CollectionType.Student">
<!-- 数组属性注入-->
<property name="courses">
<array>
<value>java</value>
<value>数据库</value>
</array>
</property>
<!-- list注入-->
<property name="frends">
<list>
<value>java</value>
<value>数据库</value>
</list>
</property>
<!-- map注入-->
<property name="works">
<map>
<entry key="JAVA" value="java"></entry>
<entry key="PHP" value="php"></entry>
</map>
</property>
<!-- set注入-->
<property name="sets">
<set>
<value>Mysql</value>
<value>Redis</value>
<value>Pgsql</value>
</set>
</property>
</bean>
5:在集合中设置对象类型
6.把集合注入部门抽取出来
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
<util:list id="bookList">
<value>易筋经</value>
<value>九阴真经</value>
<value>李华宝典</value>
</util:list>
<util:list>
<bean id="dd" class="com.hu.CollectionType.Book"></bean>
</util:list>
<bean id="book" class="com.hu.CollectionType.Book">
<property name="list" ref="bookList"></property>
</bean>
</beans>
7.Ioc操作Bean管理(FactoryBean)
7.1:Spring有两种类型Bean,一种是普通的bean,另外一种工厂bean(FactoryBean)
7.2:普通bean:在配置文件定义Bean类型就是返回类型
7.3:工厂Bean:在配置文件定义bean类型可以和返回类型不一样
第一步:创建类,让这个类作为工厂bean,实现接口FactoryBean
第二部:实现接口里面的方法,在实现的方法中定义返回的bean类型
8.bean管理(bean的作用域)
1.在spring里面,设置创建的bean是单实例还是多实例
2.在默认情况下创建的bean是单实例对象
3.在spring设置bean是实例还是多实例;bean标签中的<scope>属性
9.bean管理(bean的生命周期)
1.什么是生命周期:对象的创建到销毁的过程
2:bean的生命周期:1.创建bean实例,通过无参构造2.为bean设置属性和对其他bean的引用(调用set方法)3.调用bean的初始化方法(对象获取了)4:bean可以使用了5.当容器关闭的时候,调用bean 的销毁方法
10.ioc(控制反转)xml自动装配
bean标签中autowire属性(byname:根据属性的名称注入,bytype:根据属性的类型注入)
11.ioc(控制反转)bean管理(引入外部属性文件 )
1:引入context名称空间
12:什么是注解
1.注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值)
2。使用注解,注解作用在类上面,方法上面,属性上面
3.使用注解的目的:简化xml配置
13:spring提供bean管理中创建对象提供注解
1:@Controller
2:@Service
3:@Controller
4:@Repository
上面四个注解功能都是一样的,都可以用来创建bean实例
14:基于注解创建对象
第一步:引入spring-aop的包
第二部:开启扫描:
<context:component-scan base-package="com.hu"></context:component-scan>
15基于注解注入属性
1:@autowired:根据属性类型进行自动装配
2:@qualifier:根据属性名称进行注入
3:@resource:可以根据类型注入,也可以根据名称注入
4:@value:注入普通属性
1~3:注入对象类型
@qualifier要和@autowired一起使用
16.完全注解开发
1:创建配置类,替代xml文件
5.AOP(概念)
1.什么是aop(Aspect:切面,方面 Oriented:面向 Programming:设计,编程),通过预编译方式和运行期间动态代理实现。
2.实现动态代理
2.1:调用newProxyInstance方法:三个参数1:类加载器2:增强方法所在的类,这个类实现的接口,支持多个接口3:实现这个接口InvocationHandler,创建对象,写增强方法
3.aop操作相关的术语
3.1:连接点: 切入点 通知(增强)切面
4.AOP操作(准备)
1.Spring框架一般都是基于AspectJ实现AOP操作
什么是AspectJ:独立的AOP框架,不是Spring的组成部分
5.切入点表达式
1.作用,知道对哪个类里面的哪个方法进行增强
2.语法结构
execution([权限修饰符][返回类型][类全路径][方法名称][参数列表])
6.实现aop步骤
6.1:在spring配置文件中,开启注解扫描
6.2:使用注解创建User和UserProxy对象
6.3:在增强类上面添加注解@aspectj
6.4:在spring配置文件中开启生成代理对象
7.相同的切入点进行抽取
8.多个增强类对用一个方法进行增强,设置优先级
8.1在增强类的上面添加注解@order(数字类型的值),值越小优先级越高
6.Jdbctemplate(概念和操作)
1.什么是jdbctemplate:spring框架对jdbc进行封装
2.spring创建数据库连接1:引入jar包2:配置数据库连接池3:创建jdbctemplate对象实例
7.事务
1.什么是事务:事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都失败
2.事务四大特性:1,原子性2,一致性3,隔离性4,持久性(ACID)
3:脏读,不可重复读,虚度(通过设置事务隔离级别解决问题)
8.@nullable注解
1:@nullAble 可以用在方法、属性、参数上面;标识方法的返回数值可以为空,属性可以为空,参数可以为空
9.springwebflux
1:响应式编程
2:SpringWebflux:基于注解编程模型
3:SpringWebflux:基于函数式编程模型
4:同步与异步:同步:针对调用者:调用者发送请求,如果等着对方回应之后才去做其他事情就叫做同步;如果发送请求之后不等着回应就去做其他事情就是异步
5:阻塞和非阻塞:针对被调用者:被调用者收到请求之后,做完请求之后才给出反馈就是阻塞;收到请求之后马上给出反馈后再去做事情就是非阻塞。
6:优势:一:提高并发量;二:spring5是基于java8,可以使用函数式编程方式实现路由请求
7:springmvc和springwebflux的区别:
8:一:都可以使用注解方式,都运行在tomcat等容器中;二:springMvc采用命令式编程,webFlux采用异步响应式编程