前言
pdf+源码(大全),对应视频:https://www.bilibili.com/video/BV1VJ411X7xXp=20&vd_source=0e4ada3d15f80172cb72c52e0fcabd05
自我感觉黑马课程比官方文档好,新手友好,强推!
看文档必看视频效率高,理解更透,一遍看不懂,反复看!
有问题,欢迎与我讨论: qq:1657019234
黑马程序员ssm资料(从spring–>springmvc–>springboot–>maven高级->cloud微服务)
文章目录
- spring核心容器
- spring注解开发(正片开始)
- spring整合mybatis
- spring整合Junit
- AOP:用于不改变原代码基础上 进行功能增强
- Spring事务
- Maven分模块开发:
- springboot
- nacos配置中心(cloud-alibaba)
- nacos服务发现
耦合性可以是低耦合性(或称为松散耦合),也可以是高耦合性(或称为紧密耦合)。以下列出一些耦合性的分类,从高到低依序排列:
- 内容耦合(content coupling,耦合度最高):也称为病态耦合(pathological coupling)当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。
- 共用耦合/公共耦合(common coupling):也称为全局耦合(global coupling.)指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程序随耦合模块的个数增加而增加。
- 外部耦合(external coupling):发生在二个模块共用一个外加的数据格式、通信协议或是设备界面,基本上和模块和外部工具及设备的沟通有关。
- 控制耦合(control coupling):指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能;
- 特征耦合/标记耦合(stamp coupling):也称为数据结构耦合,是指几个模块共享一个复杂的数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址;
- 数据耦合/数据耦合(data coupling):是指模块借由传入值共享数据,每一个数据都是最基本的数据,而且只分享这些数据(例如传递一个整数给计算平方根的函数)。
- 消息耦合(message coupling,是无耦合之外,耦合度最低的耦合):可以借由以下二个方式达成:状态的去中心化(例如在对象中),组件间利用传入值或消息传递 (计算机科学)来通信。
- 无耦合:模块完全不和其他模块交换信息。
降低耦合度的方法
1、少使用类的继承,多用接口隐藏实现的细节。 java面向对象编程引入接口除了支持多态外, 隐藏实现细节也是其中一个目的。
2、模块的功能化分尽可能的单一,道理也很简单,功能单一的模块供其它模块调用的机会就少。(其实这是高内聚的一种说法,高内聚低耦合一般同时出现,为了限制篇幅,我们将在以后的版期中讨论)。
3、遵循一个定义只在一个地方出现。
4、少使用全局变量。
5、类属性和方法的声明少用public,多用private关键字,
6、多用设计模式,比如采用MVC的设计模式就可以降低界面与业务逻辑的耦合度。
7、尽量不用“硬编码”的方式写程序,同时也尽量避免直接用SQL语句操作数据库。
8、最后当然就是避免直接操作或调用其它模块或类(内容耦合);如果模块间必须存在耦合,原则上尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,避免使用内容耦合。
紧密耦合的系统在开发阶段有以下的缺点:
spring核心容器
本章是core&bean的原理讲解
Spring就提出了一个解决方案:
- 使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象
- 即:使用消息耦合(耦合度最低的耦合),去中心化,
- IOC(Inversion of Control)控制反转
(1)什么是控制反转呢?
- 使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。
2.DI的注入方法
-
setter注入(比构造器注入更常用,推荐,我们一般只用构造器注入)(又分为
-
引用类型注入)
-
简单类型(int…String)注入)
-
集合类型注入
<property name="names"> <list> <value>xxx</value> <ref bean="dataSource"/> <list> </property>
-
-
构造器注入
IoC基础上,需要绑定两个Bean之间的依赖关系,需要DI进行绑定,的形式
3.bean的生命周期scope: <bean id=“bookDao” class=“com.itheima.dao.impl.BookDaoImpl” init-method=“init” destroy-method=“destory”/ …>当然,还有很多别的scope生命周期属性
spring注解开发(正片开始)
spring3.0升级了
纯注释开发,使用一个添加了 @configuration的config配置类来进行配置
-
普通配置类注入:
-
第三方配置类注入
spring整合mybatis
可以看到,在老师给的项目中,shiro( shiro是apache的是一个分布式权限管理的框架,实现 用户认证、用户授权)
和 cors(用于允许跨域请求)
出于安全原因,浏览器禁止AJAX调用当前来源之外的资源,跨域资源共享(CORS)是由大多数浏览器实施的W3C规范,使您可以灵活地指定对哪种跨域请求进行授权。
从Spring Framework 4.2开始,开箱即用地支持CORS。 CORS请求(包括带有OPTIONS方法的预检请求)将自动分派到各种已注册的HandlerMappings。
二者采取了类似的配置类形式
spring整合Junit
AOP:用于不改变原代码基础上 进行功能增强
- 概念:AOP(Aspect Oriented Programming)面向切面编程,一种编程范式
- 作用:在不惊动原始设计的基础上为方法进行功能增强
- 核心概念
- 代理(Proxy):SpringAOP的核心本质是采用代理模式实现的
- 连接点(JoinPoint):在SpringAOP中,理解为任意方法的执行
- 切入点(Pointcut):匹配连接点的式子,也是具有共性功能的方法描述
- 通知(Advice):若干个方法的共性功能,在切入点处执行,最终体现为一个方法
- 切面(Aspect):描述通知与切入点的对应关系
- 目标对象(Target):被代理的原始对象成为目标对象
切入点表达式:
-
切入点表达式标准格式:动作关键字(访问修饰符 返回值 包名.类/接口名.方法名(参数)异常名)
execution(* com.itheima.service.*Service.*(..))
-
切入点表达式描述通配符:
- 作用:用于快速描述,范围描述
*
:匹配任意符号(常用)..
&