spring概述
spring 是什么
Spring 框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean 来完成以前只可能由 EJB 完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从 Spring 中受益。
Spring是一个轻量级Java开发框架,最早由Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注于应用程序的开发。
Spring最根本的使命是解决企业级应用开发的复杂性,即简化Java开发。
Spring可以做很多事情,它为企业级开发提供了丰富的功能,但是这些功能的底层都依赖于它的两个核心特性,也就是依赖注入(dependency injection,DI)和面向切面编程(aspect-oriented programming,AOP)。
Spring 的发展历程
1997 年 IBM 提出了 EJB 的思想
1998 年,SUN 制定开发标准规范 EJB1.0
1999 年,EJB1.1 发布
2001 年,EJB2.0 发布
2003 年,EJB2.1 发布
2006 年,EJB3.0 发布
Rod Johnson(spring 之父)
Expert One-to-One J2EE Design and Development(2002)
阐述了 J2EE 使用 EJB 开发设计的优点及解决方案
Expert One-to-One J2EE Development witxszxt EJB(2004)
阐述了 J2EE 开发不使用 EJB 的解决方式(Spring 雏形)
2017 年 9 月份发布了 spring 的最新版本 spring 5.0 通用版(GA)
spring 的优势
方便解耦,简化开发
通过 Spring 提供的 IoC 容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造
成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可
以更专注于上层的应用。
AOP 编程的支持
通过 Spring 的 AOP 功能,方便进行面向切面的编程,许多不容易用传统 OOP 实现的功能可以
通过 AOP 轻松应付。
声明式事务的支持
可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理,
提高开发效率和质量。
方便程序的测试
可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可
做的事情。
方便集成各种优秀框架
Spring 可以降低各种框架的使用难度,提供了对各种优秀框架(Struts、Hibernate、Hessian、Quartz
等)的直接支持。
降低 JavaEE API 的使用难度
Spring 对 JavaEE API(如 JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些 API 的
使用难度大为降低。
Java 源码是经典学习范例
Spring 的源代码设计精妙、结构清晰、匠心独用,处处体现着大师对 Java 设计模式灵活运用以
及对 Java 技术的高深造诣。它的源代码无意是 Java 技术的最佳实践的范例。
spring 的体系结构
◆核心容器(Core):核心容器提供 Spring框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
◆Spring 上下文(Context):Spring 上下文是一个配置文件,向 Spring框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
◆Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring框架中。所以,可以很容易地使 Spring框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
◆Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
◆Spring ORM:Spring框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
◆Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
◆Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
创建第一个spring工程
第一步:导入依赖包到maven项目的pom.xml中
第二步:在类的根路径下创建一个任意名称的 xml 文件(不能是中文)
给配置文件导入约束:
第三步:让 spring 管理资源,在配置文件中配置
UserController
UserServiceimpl
测试配置是否成功
控制反转(IOC)——第一个核心思想
控制反转概述
控制反转(IoC)是一种将对象的创建、组装和管理交给容器或框架来实现的编程思想。它可以减低对象之间的耦合度,提高代码的灵活性和模块化。控制反转的一种常见形式是依赖注入(DI),即对象的依赖(需要的资源)由外部实体提供,而不是由对象本身创建。控制反转也可以通过事件驱动编程或模板方法模式来实现。
控制反转实现方式
xml方式
语法
bean标签详解
id:给对象在容器中提供一个唯一标识。用于获取对象。
class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。
scope:指定对象的作用范围。
* singleton :默认值,单例的.
* prototype :多例的.
name:映射路径名称
factory-bean:工厂bean名称
factory-method:工厂方法
lazy-init:懒加载配置
* false :默认值,关闭懒加载.
* true :开启懒加载.
init-method:初始化方法
destroy-method:销毁方法
创建方式
第一种方式:使用默认无参构造函数
第二种方式:spring 管理静态工厂-使用静态工厂的方法创建对象
第三种方式:spring 管理实例工厂-使用实例工厂的方法创建对象
注解方式
beans.xml中追加配置
第一套注解(通用注解)
第二套注解(个性化注解)
依赖注入实现方式
依赖注入(Dependency Injection,DI)是一种设计模式,它通过将对象之间的依赖关系的创建和维护转移到外部容器中来,以减少对象之间的紧耦合性并提高可重用性。在传统的程序设计中,对象通常通过直接创建和维护依赖关系来使用其他对象,这会导致对象之间的紧耦合性,使代码难以维护和扩展。然而,依赖注入模式将对象之间的依赖关系的创建和维护转移到外部容器中,使得对象之间的耦合性降低,并且可以方便地更改依赖项的实现类,而无需修改受影响的对象的代码。
依赖注入通常有两种方式:设值注入和构造注入。设值注入是通过客户端类的公共属性或setter方法提供依赖性。构造注入则是通过在客户端类的构造函数中传递依赖项来实现。在Spring框架中,依赖注入是其核心特性之一,它通过Spring容器来管理对象的生命周期和依赖关系,从而实现解耦和灵活的配置。
总的来说,依赖注入是一种有效的设计模式,它能够帮助开发者降低代码之间的耦合性,提高代码的可重用性和可维护性,是构建高质量软件的重要工具之一。
XML方式
手动注入
Set方法注入
构造方法注入
自动注入
Set方法注入
byName注入
通过指定名称对应被注入方的set方法名称,可以有多个类型,但是需要有一个唯一的名字与之对应
byType注入
通过注入的类型来自动匹配相关的bean,但是需要提供唯一的一个类型bean
构造方法注入
通过指定构造方法注入
注解方式
beans.xml中追加配置
第一套注解
第二套注解
Spring整合其他技术
常见的数据库连接池
C3P0
DBCP
Druid
注意:各个数据库连接池的优缺点
整合数据库连接池dbcp
1.导入jar包
2.beans.xml
3.配置数据源
beans.xml
数据库连接池就是链接数据库
之前写项目的时候,都是当场去获取数据库链接,效率很慢。所以就提出了数据库连接池,就是创建一个缓存区,里面存放多个链接,这些链接是已经都链接好的了,比如有100个。我需要链接哪个,spring就给我哪一个。我们就不需要自己再去创建链接了。就节省了时间,提高了效率。超过100个人去链接的话,就去等待其他人去释放链接。当然数数据库连接池给了我们一些别人操作:
整合mybatis
1.删除所有dao层的实现层
2.导入包
3.mybatis-config.xml
4. beans.xml
5.业务层(注入SqlSessionTemplate)
6.测试