一.初识Spring
1.简介
作者:Rod Johnson
-
得出一个公式:Spring = 春天 = Java程序员的春天 = 简化开发。最后的简化开发正是Spring框架带来的最大好处。
-
Spring是一个轻量级控制器反转loc和面向切面的容器框架
-
2002,首次推出了Spring框架的前身: interface21框架
-
spring前身是2002年的interface21的一个小框架,其正式第一版诞生于2004年3月24号
-
Spring的理念:解决企业应用开发的复杂性,使现有的技术的更容易使用,整合了现有技术的框架
-
SSH:Stuct2+spring+Hibernate
-
SSM:Spring+spring+Mybatis
Spring官网:Spring Framework
1.2 优点
-
spring是一个开源免费的框架(容器)
-
spring是一个轻量级的()很小,非入侵式的框架(引入了spring不会改变代码的任何情况,反而你用了它更加简单)
特性:
-
面向切面编程(aop)
-
支持事务处理(支持声明式事务),对框架整合的支持
总结:
-
Spring是一个轻量级控制器反转loc和面向切面的容器框架(aop)
1.3组成
1.4扩展
springboot
-
一个快速开发的脚手架
-
基于springboot可快速的开发的单个微服务
-
约定大于配置
spring cloud
-
springcloud 是基于springboot的实现
因为现在大多数公司都在使用springboot 进行快速开发,学习springboot的前提需要完全掌握spring级springmvc 乘上启下的作用
个人认为(唯一的)弊端:发展太久之后 违背的原理的理念 配置十分繁琐 人称"配置地狱"
二.IOC理论推导(是一种思想)
控制反转:是一种编程思想,是一种新型模式,由于出现的比较新,没有纳入bof23种设计模式范围当中去
- 第一件事:我不在程序员采用编码的方式来new对象了(new 对象我不管了,new对象的权利我交出去了)
- 第二件事:我不在程序员采用编码的方式来维护对象的关系了(对象之间的维护权我也不管了,交出去了)
Spring框架
- spring实现了控制反转的loc思想
- spring可以new一对象
- spring还可以帮你维护对象和对象之间的关系
- spring是一个实现了ioc思想的容器
控制反转的实现方式有很多种,其中比较重要的叫做;依赖注入(Dependency Injection 简称DI)
控制反转是思想,依赖注入是这种思想的具体实现方法
依赖注入包含2种方式
- 第一种:set注入(执行set方法给属性赋值)
- 第二种:构造方法(执行构造方法给属性赋值)
- 依赖注入中的“依赖”是什么意思 “注入”又是什么意思
- 依赖:是A和B对象之间的关系
- 注入:是一种手段,是让A和B对象产生一种关系
- 依赖注入:对象A和B对象之间的关系,靠手段来维护,包含set和构造注入
三.Spring的第一个入门程序
当你正式开始学习Spring框架时,一个好的起点是创建一个简单的入门程序。下面是一个是我的一个总结,演示如何使用Spring框架创建和运行第一个程序。
1. 配置开发环境:
- 安装Java Development Kit (JDK) 和一个适合的IDE,如Eclipse或IntelliJ IDEA。
- 下载Spring框架,并将其添加到项目的类路径中。
2. 创建一个新的Java项目:
- 在IDE中创建一个新的Java项目。
3. 添加所需的依赖项:
- 在项目的构建文件中(Maven)添加Spring框架的依赖项。
- 如果你不使用构建工具,则手动将Spring框架的JAR文件添加到项目的类路径中。
<!--spring的context的依赖-->
<!-- 当前你引入springcontext依赖之后,表示spring的基础依赖引入了-->
<!-- 如果,你还想使用spring的jdbc依赖 或者说tx 那么还需要添加依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.9</version>
</dependency>
<!--junit依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.2</version>
<scope>test</scope>
</dependency>
4. 创建一个Spring配置文件:
- 在项目中创建一个XML文件,并命名为"spring-confiy.xml"(也可以选择其他名称)。
- 在该文件中,定义Spring容器和相关的bean。
然后就是通过配置bean标签来完成对象的管理
id:对象名
- class:对象的模板类(所有交给IOC容器来管理的类必须要有无参构造函数,因为Spring底层是通过反射机制来创建对象,调用的是无参构造)
- 对象的成员变量通过property标签完成赋值
name:成员变量名
- value:成员变量值(基本数据类型,String可以直接赋值,如果是其他引用类型不可以通过value赋值)
- ref:把IOC中的另一个bean赋给当前成员变量(DI)
5. 创建一个简单的Java类:
- 在项目中创建一个Java类,并给它一个有意义的名称,如"User"。
- 在该类中,编写一些简单的代码来调用Spring容器并获取bean对象。
6. 配置Spring容器:
- 在Spring配置文件中,定义你的bean。
- 可以使用 `<bean>` 元素来定义bean,指定bean的名称、类型和其他属性。
7. 运行程序:
- 在MainApp类中,创建一个新的Spring容器。
- 使用 `spring-confiy.xml` 类来加载Spring配置文件。
- 获取所需的bean对象,并调用其方法。
//第一步获取spring容器
//ApplicationContext翻译为:应用上下文 其实就是给spring容器
//ApplicationContext 是一个接口
//ApplicationContext 接口下有很多实现类 其中有一个实现类叫做ClassPathXmlApplicationContext
// lApplicationContext
//ClassPathXmlApplicationContext 专门从类的路径当中加载spring配置文件 的一个spring的上下文
//ClassPathXmlApplicationContext 实现类可以放多个配置文件哦
//运行这段代码 只有执行 就相当于启动了spring容器 解析spring xml文件 并实列化所有的bean对象 就到spring容器当中
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-confiy.xml");
//第二步,根据spring的id获取这个容器
Object bean = applicationContext.getBean("UserBean");
System.out.println(bean);
//通过第二个参数来指定返回的bean的类型
Userservceimpl userBean = applicationContext.getBean("userBean", Userservceimpl.class);
userBean.UserTest1();
//这下面的意思如果在cpan里面FileSystemXmlApplicationContext可以通过FileSystemXmlApplicationContext调取
//如果这个文件没有在类文件当中可以借助FileSystemXmlApplicationContext来实现
//ApplicationContext的超级父接口是BeanFactory(翻译为Bean工厂,就是能够生产Bean对象的一个工厂对象)
//BeanFactory是IOC容器的顶级接口
//BeanFactory实际使用了:工厂模式
//Spring的底层是怎么实现的呢 xml解析+工厂+反射机制
//总结一个点:所有使用BeanFactory也可以实例化对象
BeanFactory applicationContext1=new FileSystemXmlApplicationContext("D:/160/spring-confiy.xml");
Userservceimpl userBean1 = applicationContext1.getBean("userBean", Userservceimpl.class);
userBean1.UserTest1();
8. 测试程序:
- 运行你的程序,并确保它能够成功调用Spring容器并获取到bean对象。
- 可以在控制台输出一些信息,以验证程序的正确性。
通过按照上述步骤进行操作,你就可以创建和运行一个简单的Spring入门程序。这将帮助你了解如何使用Spring框架来管理和配置应用程序的组件。