学习视频(狂神说Java):https://www.bilibili.com/video/BV1WE411d7Dv/?spm_id_from=333.999.0.0&vd_source=cd78676622532a7b3094695537918c1b
spring官网:https://spring.io/
进入官网 – projects – spring Framwork – learn.找到最新版,点开官方文档
1.Spring简介
Spring是一个轻量级:控制反转(IOC)和面向切面(AOP)的容器框架
- 简介
- 解决企业级开发的复杂性
- Spring使用的是基本的JavaBean
- 不局限于Javaweb开发,任何Java应用
- 使用基本的JavaBean代替EJB
- Spring是一个轻量级:控制反转(IOC)和面向切面(AOP)的容器框架
- 开源框架
- 历史
- 2002,推出spring雏形,interface21框架
- 2004年3月24日发布1.0正式版:Spring (以interface21为基础)
- spring的核心框架springFramework
- 轮子理论
- 不要重复的造轮子
- spring 理论
- 保持强大的向后性(兼容以前的版本)
- 使现有技术更加容易使用,本身是一个大杂烩,支持很多东西,整合了现有的技术框架
- servlet
- websocket
- concurrency utilities
- JSON
- Bean
- JPA
- JMS
- transactions
- DAO support
- JDBC
- ORM
- Marshalling XML.
- web
- 缓存、调度、流、国际化等等
- …
- 常见框架
- SSH: struts2 + spring +Hibernate
- SSM: SpringMVC + spring + Mybatis
- 网址
- 官网: https://spring.io/projects/spring-framework#overview
- gitHub地址:https://github.com/spring-projects/spring-framework
- maven: 搜索 spring maven
- spring-webmvc
- spring-jdbc
- 优点
- 免费、开源的框架(容器)
- 轻量级(包很小,下载直接用)
- 非入侵式(引用不会因影响原来项目)
- 控制反转(IOC)、面向切面编程(AOP)
- 支持事务处理、对框架整合的支持
2.Spring组成及拓展
- 组成:7大模块
- 1.底层支撑: Spring Core
- 2.Spring AOP
- 3.Spring ORM (对象关系映射如Mybatis)
- 4.Spring DAO(对Dao层的支持)
- 5.Spring Web(webApplicationContext)
- 6.Spring Context(ui页面的支持、EJB、邮件等的支持)
- 7.Spring Web MVC(对jsp、servlet的支持)
- 扩展
- 现代化Java开发 (基于spring的开发)
- spring boot (构建一切)
- 快速开发脚手架,只要做一些简单的配置
- 基于spring boot可以快速开发单个微服务
- 约定大于配置
- 弊端(发展太久,配置太多)
- spring cloud (协调一切)
- 基于spring boot实现
- spring cloud data flow (连接一切)
3.IOC理论推导及本质
IOC是一种思想
DI是IOC的一种实现方法
- 不用去管理对象的创建了,系统耦合性降低,更关注于业务实现
- IOC本质
- IOC是一种思想
- DI依赖注入是实现IOC的一种方法
- 所谓控制反转就是获得依赖对象的方式反转了
- IOC是spring框架的核心内容
- Spring容器在初始化时先读取配置文件
- 根据配置文件或元数据创建与组织对象存入容器中
- 程序使用时再从IOC容器中取出需要的对象
- 采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的
- 而采用注解方式可以把两者合为一体
- Bean的定义信息直接以注解的形式定义在实现类中(零配置)
- 控制反转
- 是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式
- 在spring中实现控制反转的是IOC容器,其实现方法是依赖注入DI
4.Hello Spring
使用spring很便捷,因为框架在背后做了很多事情
- 实体类
- 配置文件ApplicationBean.xml
- 去官网拿配置文件格式(beans文件头)
- 使用spring来创建对象,在spring中这些都称为Bean
<bean><property> </property></bean>
- 实例化容器:拿到spring的容器
- 提供给ApplicationContext构造函数的一个或多个位置路径的资源字符串
- 使容器从外部资源加载配置元数据CLASSPATH
- 获取spring的上下文对象,对象都在spring中管理
ApplicationContext context = new ClassPathXmlApplicationContext(资源路径) context.getBean("配置文件bean的id")
- Java创建对象
- 传统应用程序的对象是由程序本身创建的,new一个对象
类型 变量名 = new 类型(); Hello hello = new Hello();
- 传统应用程序的对象是由程序本身创建的,new一个对象
- spring创建对象
- spring对象是由spring来创建的
- 程序本身不创建对象,被动接收对象
<bean id ="hello" class = "com.test.pojo.Hello"> <property name="str" value = "spring"/> </bean>
- id,相当于变量名
- class ,类的全路径,相当于new的对象
- property,相当于给对象设置属性,并赋值
- 控制
- 【谁来控制对象的创建】
- 传统应用程序的对象是由程序本身控制创建的
- 使用spring后,对象是由spring来创建的
- 反转
- 程序本身不创建对象
- 变成被动接收对象
- 依赖注入
- 利用set方法来进行注入
- IOC
- 是一种编程思想,由主动创建变为被动接收
- 对象由spring来创建、管理、装配
- ref
- 引用spring容器中创建好的对象
- value是普通对象
5.IOC创建对象方式
创建对象在spring中就是创建bean
- User user = new User();
- 执行这个的时候会调用User的无参构造方法
- IOC创建对象的方式
- 默认实现:使用无参构造创建对象
- 有参构造
- 第一种方式,下标
- index=“0” 表示有参构造的第一个参数
<constructor-arg index="0" value="测试有参构造下标方式" />
- index=“0” 表示有参构造的第一个参数
- 第二种方式,类型
- 不建议使用,有可能参数类型是一样的
<constructor-arg type="int" value="测试有参构造类型方式" />
- 不建议使用,有可能参数类型是一样的
- 第三种方式,参数名
- 参数名
<constructor-arg name="str" value="测试有参构造ref name方式" />
- 参数名
- 第一种方式,下标
- spring容器
- 所有bean在一注册的时候,就被spring实例化了
- 每个对象在内存中只有一个实例
- 总结
- 在配置文件加载的时候,容器中管理的对象就已经初始化了
6.Spring配置说明
- spring配置
- 别名alias
- 如果添加了别名,可以使用别名获取
- Bean的配置
- id: bean的唯一标识符,相当于对象名
- class: 对象类全路径
- name: 别名,分隔符:逗号、空格、分号
- import 导入
- 一般用于团队开发使用,将多个配置文件导入合并为 一个
<import resource="配置文件名"/>
- 一般用于团队开发使用,将多个配置文件导入合并为 一个
- 别名alias