Spring--Atos学习心得笔记
什么是Spring
Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。
◆目的:解决企业应用开发的复杂性
◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
◆范围:任何Java应用
2002,首次推出了Spring框架,Interface21。
Spring是一个 轻量级控制反转(IoC) 和 面向切面(AOP) 的容器框架。
Spring的作者
Rod Jahnson:Spring Framework创始人,著名作者。 Rod在悉尼大学不仅获得了计算机学位,同时还获得了音乐学位。更令人吃惊的是在回到软件开发领域之前,他还获得了音乐学的博士学位。
Spring的理念
使现有的技术更加容易使用,本身是一个大杂烩,整合了现有的技术框架。
SSH:Struct2 + Spring + Hibernate!
SSM:SpringMVC + Spring + Mybatis!
Spring的依赖
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
Spring的优点
-
Spring是一个开源的免费的框架(容器)!
-
Spring是一个轻量级、非入侵式的框架!
轻量级:导入依赖就能够使用。
非入侵式:集成Spring不会改变原来的代码情况,还可能会更简单。 -
控制反转(IOC)
-
面向切片编程(AOP)
-
支持事务的处理,对框架整合的支持
Spring的缺点
发展太久了之后,违背了原来的理念!配置十分繁琐,人称“配置地狱”。
总结一句话
Spring就是一个轻量级的控制反转(IOC)和面向切片编程(AOP)的框架。
Spring的组成
Spring七大模块(在别人博客那里Copy的)
核心容器(Spring Core)
核心容器提供Spring框架的基本功能。Spring以bean的方式组织和管理Java应用中的各个组件及其关系。Spring使用BeanFactory来产生和管理Bean,它是工厂模式的实现。BeanFactory使用控制反转(IoC)模式将应用的配置和依赖性规范与实际的应用程序代码分开。
应用上下文(Spring Context)
Spring上下文是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,如JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring面向切面编程(Spring AOP)
通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring框架中。所以,可以很容易地使 Spring框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
JDBC和DAO模块(Spring DAO)
JDBC、DAO的抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理,和不同数据库供应商所抛出的错误信息。异常层次结构简化了错误处理,并且极大的降低了需要编写的代码数量,比如打开和关闭链接。
对象实体映射(Spring ORM)
Spring框架插入了若干个ORM框架,从而提供了ORM对象的关系工具,其中包括了Hibernate、JDO和 IBatis SQL Map等,所有这些都遵从Spring的通用事物和DAO异常层次结构。
Web模块(Spring Web)
Web上下文模块建立在应用程序上下文模块之上,为基于web的应用程序提供了上下文。所以Spring框架支持与Struts集成,web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
MVC模块(Spring Web MVC)
MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的。MVC容纳了大量视图技术,其中包括JSP、POI等,模型来有JavaBean来构成,存放于m当中,而视图是一个街口,负责实现模型,控制器表示逻辑代码,由c的事情。Spring框架的功能可以用在任何J2EE服务器当中,大多数功能也适用于不受管理的环境。Spring的核心要点就是支持不绑定到特定J2EE服务的可重用业务和数据的访问的对象,毫无疑问这样的对象可以在不同的J2EE环境,独立应用程序和测试环境之间重用。
Spring学习流程
(早年Spring官方推荐流程:现代化的Java开发,就是基于Spring的开发)
Spring Boot -> Spring Cloud -> Spring Cloud Data Flow
- Spring Boot:
- 一个快速开发的脚手架
- 基于Spring Boot可以快速开发单个微服务
- 约定大于配置!
- Spring Cloud
- Spring Cloud是基于Spring Boot实现的
(目前大部分公司都在使用Spring Boot进行快速开发,学习Spring Boot的前提是完全掌握Spring及Spring MVC!承上启下的作用!)
- Spring Cloud是基于Spring Boot实现的
IOC理论推导
以前的业务实现
1.UserDao 接口
2.UserDaoImpl 实现类
3.UserService 业务接口
4.UserServiceImpl 业务实现类
在之前的业务中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求去修改源代码!如果程序代码量十分庞大,则修改一次的成本价十分昂贵!
我们使用一个set接口实现,就发生了变化!(这里是思想上的变化,其实代码没有太大变化)
- 之前,程序时主动创建对象!控制权在程序员手里。
- 使用了set注入后,程序不再具有主动性,文士变成了被动接受对象。
这种思想,从本质上解决的问题,使得程序员不用再去管理对象的创建!(例如一些网站的用户自定义,这种思想只需要使用set注入即可)系统耦合性大大降低,可以更加专注在业务的实现。这是IOC的原型!
IOC本质
IOC,是一种设计思想,DI(依赖注入)是实现IOC的最常见一种方法;一种将控制权转移的设计模式,由传统的程序控制转移到容器控制。
我们不用自己创建实例对象,这些都交给Spring的bean工厂帮我们创建管理。这也是Spring的核心思想,通过面向接口编程的方式来是实现对业务组件的动态依赖。这就意味着IOC是Spring针对解决程序耦合而存在的。在实际应用中,Spring通过配置文件(xml或者properties)指定需要实例化的java类(类名的完整字符串),包括这些java类的一组初始化值,通过加载读取配置文件,用Spring提供的方法(getBean())就可以获取到我们想要的根据指定配置进行初始化的实例对象。(还可以使用注解方式)
IOC创建对象的方式
- 默认使用无参构造方法创建对象。
- 想要使用有参构造方法创建对象。
- 下标赋值
所谓的IOC:对象由Spring来创建,管理,装配!