1.1-简介
- spring:春天、给软件行业带来了春天
- 2002年,spring的前身interface21推出
- 2004年,以interface21框架为基础 的spring1.0版本发布
- 作者:Rod Johnson,专业不是计算机,而是音乐学
- spring理念:使现有的技术更加容易使用,本身是个大杂烩,整合了现有的技术框架
- SSH:Struct2+Spring+Hibernate
- SSM:SpringMVC+Spring+Mybatis
官方下载地址:JFrog
GitHub:GitHub - spring-projects/spring-framework: Spring Framework
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.0.jdbc</version>
</dependency>
1.2-优点
- spring是一个开源的免费的框架(容器)!
- spring是一个轻量级的、非入侵式的框架
- 控制反转(IOC)、面向切面编程(AOP)
- 支持事物的处理、对框架整合的支持
总结:spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架
1.3-组成
1.4-拓展
现代化的java开发!说白了就是基于Spring开发!
- Spring Boot
- 一个快速开发的脚手架。
- 基于SpringBoot可以快速的开发单个微服务
- 约定大于配置
- Spring Cloud
- SpringCloud是基于SpringBoot实现的。
现在大多数公司都在使用SpringBoot进行开发,学习SpringBoot的前提要完全掌握Spring级SpringMVC!
Spring弊端:发展了太久之后,违背了原来的原理!配置十分繁琐,人称“配置地狱”
2、IOC理论推导
- UserDao接口
- UserDaoImpl实现类
- UserService业务接口
- UserServiceImpl实现类
在我们之前的业务中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求去修改原代码!如果程序代码量十分大,修改一成的成本十分昂贵。
我们使用Set接口实现,已经发生了革命的变化!
//userDao为接口类
private UserDao userDao;
//利用set进行动态实现值的注入(运用多态的原理,(参数)userDao 传入 new 不同的子类)
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
- 之前,程序是主动创建对象!控制权在程序猿手上!
-
使用了set注入后,程序不再具有主动性,而是变成了被动的接受对象
这种思想,从本质上解决了问题,我们程序猿不用再去管理对象的创建了。系统的耦合性大大降低~,可以更加专注的在业务的实现上!这是ioc的原型
IOC本质
控制反转loC(Inversion of Control),是一种设计思想,Dl(依赖注入)是实现loC的一种方法,也有人认为DI只是loC的另一种说法。没有loC的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了。
采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。
**控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是loC容器,其实现方法是依赖注入(Dependency lnjection,Dl)。**
3-HelloSpring
<?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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--使用Spring创建对象,在Spring中这些都称为Bean
类型 变量名 = new 类型();
Hello helli = new Hello();
id = 变量名
class = new Hello()
property = 相当于给对象中的属性设置以个值
-->
<bean id="hello" class="com.kuang.pojo.Hello">
<property name="str" value="Spring"></property>
</bean>
</beans>
<bean id="userServiceImpl" class="com.kuang.service.UserServiceImpl">
<!--
ref:应用spring容器中创建好的对象
value:具体的值,基本数据类型
-->
<property name="userDao" ref="Impl"></property>
</bean>
这个过程就叫控制反转︰
控制:谁来控制对象的创建,传统应用程序的对象是由程序本身控制创建的,使用Spring后,对象是由Spring来创建的.
反转∶程序本身不创建对象,而变成被动的接收对象.依赖注入:就是利用set方法来进行注入的.
IOC是一种编程思想,由主动的编程变成被动的接收.
可以通过new ClassPathXmIlApplicationContext去浏览一下底层源码
OK,到了现在,我们彻底不用再程序中去改动了,要实现不同的操作,只需要在xml配置文件中进行修改,所谓的loC,一句话搞定:对象由Spring 来创建,管理,装配!
4-IOC创建对象的方式
- 使用无参构造创建对象,默认
- 有参构造要使用方法
- 第一种:下标赋值
<!--第一种、下标赋值-->
<bean id="user" class="com.kuang.pojo.User">
<constructor-arg index="0" value="第一种方法、下标赋值"></constructor-arg>
</bean>
2.第二种:通过类型方法:不推荐使用
<!--第二种、通过类型-->
<bean id="user" class="com.kuang.pojo.User">