本文主要是介绍小小白的SSM学习笔记——Spring5学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 学习笔记仅为个人学习记录,如有错误望各位大佬不吝赐教!学习视频资源:[遇见狂神说](https://space.bilibili.com/95256449?from=search&seid=5212369959759283056)
- Spring5
- 一、了解历史
- 1.1发展
- 1.2What is Spring?
- 1.3什么是最少侵入?
- 侵入式:
- 非侵入式
- 非侵入式的技术体现
- 如何实现非侵入式
- 1.4、SSH和SSM
- 1.5、Spring的优点
- 1.6、Spring的组成和扩展
- 二、IOC理论
- 三、HelloSpring
- 四、IoC创建对象的方式
- 1、使用对象的无参构造创建对象(默认)(**没有无参构造会报错**)
- 2、使用有参构造
- 五、Spring配置
- 1、Alias
- 2、Bean
- 3、import
- 六、依赖注入
- 为什么要使用依赖注入
- 6.1、构造器注入
- 6.2、Set方式注入(重点)
- 普通属性
- 数组
- List
- Set
- Map
- Properties
- 引用类型
- Null
- 6.3、扩展方式注入
- 6.4、Bean的作用域(Scope)
- 1. 单例(Singleton)
- 2. 原型(prototype)
- 七、自动装配(Autowire)
- 7.1、byName自动装配
- 7.2、byType自动装配
- 7.3、使用注解自动装配
- 小知识
- 八、使用注解开发
- 8.1、bean
- 8.2、属性注入
- 8.3、衍生注解
- 8.4、自动装配注解
- 8.5、作用域
- 九、完全使用Java配置(JavaConfig)
- 9.1、使用JavaConfig创建bean
- 九、【新增】xml、注解和Java Config到底选哪个
- 十、AOP
- 定义:什么是AOP
- 问题:为什么要使用AOP
- AOP术语
- AOP常用场景
- ==**五种类型的Advice**==
- 十一、spring实现AOP
- 方式一:使用Spring的API接口
- 方式二:自定义类【切面定义】
- 方式三:使用注解实现
- 十二、整合Mybatis
- 12.1、回忆Mybatis
- 12.2、整合Mybatis
- 方式一
- 方式二
- 十三、声明式事务
- 回顾事务:
- ACID原则:
- Spring管理事务的方式
- 使用Spring管理事务
- 结合AOP实现事务的织入
- ACID原则:
- Spring管理事务的方式
- 使用Spring管理事务
- 结合AOP实现事务的织入
学习笔记仅为个人学习记录,如有错误望各位大佬不吝赐教!学习视频资源:遇见狂神说
Spring5
一、了解历史
Java?Spring?春天?他们之间到底有怎样的联系?
- spring的缔造者Rod Johnson
- 一本名为Expert one-on-one J2EE Development without EJB的书
- 关于EJB(Enterprise Java Beans)又被称为 “企业Java Beans”
关于Spring的发展起源要回溯到2002年,当时正是Java EE和EJB大行其道的时候,很多知名公司都是采用此技术方案进行项目开发。这时候有一个小伙子认为 EJB 太过臃肿,并不是所有的项目都需要使用 EJB 这种大型框架,应该会有一种更好的方案来解决这个问题。
他提出了一个基于普通 Java 类(POJO)和依赖注入的更简单的解决方案。
他展示了如何在不使用 EJB 的情况下构建高质量、可扩展的在线座位预留系统。为了构建应用程序,他编写了超过 30,000 行的基础结构代码,项目中的根包命名为
com.interface21
,所以人们最初称这套开源框架为 interface21,这就是 Spring 的前身。
**“轮子理论”,也即“不要重复发明轮子”,这是西方国家的一句谚语,原话是:Don’t Reinvent the Wheel。**Spring就是在“不重复发明轮子”的理念及指导原则上做起来。
1.1发展
2003 年 Rod Johnson 和同伴在此框架的基础上开发了一个全新的框架命名为 Spring,据 Rod Johnson 介绍 Spring 是传统 J2EE 新的开始,随后 Spring 发展进入快车道。
- 2004 年 03 月,1.0 版发布。
- 2006 年 10 月,2.0 版发布。
- 2007 年 11 月,更名为 SpringSource,同时发布了 Spring 2.5。
- 2009 年 12 月,Spring 3.0 发布。
- 2012年 Rod Johnson宣布离开Spring
- 2013 年 12 月,Pivotal 宣布发布 Spring 框架 4.0。
- 2017 年 09 月,Spring 5.0 发布。
1.2What is Spring?
通常, Spring 是指一个用于构造 JAVA 应用程序的轻量级框架
- 你可以采用 Spring 来构造任何程序
- Spring 是轻量级的,意味着你只需对你的程序代码做很少改动。(最少的侵入)
- Spring 核心本身——很多附加的 Spring 组件,比如数据访问,需要与 Spring 框架有相对紧密得多的耦合关系。
1.3什么是最少侵入?
侵入式:
侵入式的做法是要求业务代码”知道”框架的代码,表现为业务代码需要继承框架提供的类,才能很好的和框架结合,使用框架带来的便利。
侵入式让业务代码产生对框架的依赖,这些代码不能在框架外使用,不利于代码的复用。
但是,可以使用户和框架更好的结合,更容易更充分的利用框架提供的功能。
非侵入式
非侵入式则不需要业务代码引入框架代码的信息,即无需继承框架提供的类,从编写者的角度来看,察觉不到框架的存在。
可以很方便的迁移到其他地方使用,代码的复用性较好。
但是框架和业务代码互动的方式可能就比较复杂。
非侵入式的技术体现
允许在应用系统中自由选择和组装Spring框架的各个功能模块,并且不强制要求应用系统的类必须继承或实现Spring框架的类和接口来达到使用框架的目的。
如何实现非侵入式
- 引用==反射机制==,通过动态调用的方式来提供各方面的功能,建立核心组件BeanFactory
- 配合使用Spring框架中的==BeanWrapper和BeanFactory组件类==最终达到对象的实例创建和属性注入
1.4、SSH和SSM
SSH:Structs + Spring + Hibernate
SSM:SpringMVC + Spring + MyBatis
1.5、Spring的优点
- Spring是一个开源的免费的框架(容器)
- Spring是一个轻量级的、非入侵式的框架
- 控制反转(IOC)、面向切面编程(AOP)
- 支持事务的处理,对框架整合的支持
1.6、Spring的组成和扩展
- 七大模块:
- SpringBoot
- 一个快速开发的脚手架
- 基于SpringBoot可以快速地开发单个微服务
- SpringCloud
- 基于SpringBoot实现
二、IOC理论
IOC:(Inversion of Control)控制反转
传统开发,我们需要对于客户的不同需求修改代码创建不同的对象,对象的创建由开发者控制,而新模式的开发,应该是由调用者去决定对象的创建,且不影响源代码。
使用了set注入后,程序的所有对象由Spring为我们注入,开发人员只需搭建好框架,写好配置文件即可。
系统的耦合性降低,(松耦合) 更加专注于业务的开发。
控制反转:主动权由程序员转换到用户
由于是"获得依赖对象的过程被反转了"
**依赖注入(Dependency Injection,DI)**则是控制反转的一种实现,所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。
其实IOC也好DI也好都是通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。
举例:
对象A依赖于对象B,当对象 A需要用到对象B的时候,IOC容器就会立即创建一个对象B送给对象A。IOC容器就是一个对象制造工厂,你需要什么,它会给你送去,你直接使用就行了,而再也不用去关心你所用的东西是如何制成的,也不用关心最后是怎么被销毁的,这一切全部由IOC容器包办。
在传统的实现中,由程序内部代码来控制组件之间的关系。我们经常使用new关键字来实现两个组件之间关系的组合,这种实现方式会造成组件之间耦合。
[参考博客]https://blog.csdn.net/love_everybody/article/details/79836136?depth_1-utm_source=distribute.pc_relevant.none-task
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入。
三、HelloSpring
-
导入官方xml配置(直接创建Spring)
<?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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="..." class="..."> <!-- collaborators and configuration for this bean go here --></bean><bean id="..." class="..."><!-- collaborators and configuration for this bean go here --></bean><!-- more bean definitions go here --></beans>
The id
attribute is a string that identifies the individual bean definition.The class
attribute defines the type of the bean and uses the fully qualified classname. -
容器中创建对象
xml配置文件中 使用标签创建对象,标签中使用标签设置属性值,前提是对应的实体类中有相应的 SET 方法。
<bean id="hello" class="com.sakura.pojo.Hello"><property name="msg" value="Spring"/> </bean>
name:对应于当前对象的属性名 value:设置对应的属性值 ref:当属性并不是普通类型时,而是引用类型时, 通过ref 指定引用对象的 bean的id - ref 和 id 之间的这种联系表达了协作对象之间的依赖关系
-
从容器中获取对象
@Test public void helloTest() {// 获取Spring的上下文对象ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");// 我们的对象存放在Spring的容器中,使用时取出即可Hello bean = (Hello) context.getBean("hello");System.out.println(bean);} }
Spring的Resource,它提供了一种从 URI 语法中定义的位置读取 InputStream 的便捷机制。
ClassPathXmlApplicationContext只是ApplicationContext接口众多实现类的一种,因为此处我们使用xml配置文件,所以使用CPX,而当我们使用注解配置时,又需要用到另一个实现类AnnotationConfigApplicationContext
到这我们再去修改传统开发的代码:
第一版
public class UserServiceImp implements UserService {// SqlDao sqlDao = new MysqlImp();SqlDao sqlDao = new OracleImp();/** 以上传统的方式需要我们通过用户的需求,频繁修改代码。*/@Overridepublic void getSqlResource() {sqlDao.getSql();}
}
当我们想要使用同一个接口的不同实现类的方法时,就需要频繁改变组合的对象(使用哪个new哪个)。。为了避免这种情况,我们可以只组合好相应的接口,增加Set方法,由调用者来决定使用哪个实现类
第二版
private SqlDao sqlDao;
public class UserServiceImp implements UserService {/** 以下使用Set方法实现控制反转*/// 组合接口private SqlDao sqlDao;// set方法控制 具体实现类public void setSqlDao(SqlDao sqlDao) {this.sqlDao = sqlDao;}@Overridepublic void getSqlResource() {sqlDao.getSql();}
}
修改后,业务代码无需变更,调用者通过Set方法来指定具体的实现类 即可,依赖的获取过程从开发人员创建对象,转换为 用户自定义选择,IoC的本质就是如此,进一步修改,使用SpringIoC容器
第三版
<bean id="mysql" class="com.sakura.dao.MysqlImp"/>
<bean id="oracle" class="com.sakura.dao.OracleImp"/>
<bean id="sqlserver" class="com.sakura.dao.SqlServerImp"/><bean id="sqlService" class="com.sakura.service.UserServiceImp"><property name=&#
这篇关于小小白的SSM学习笔记——Spring5学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!