一文带你入门Spring

 

目录

一.Spring基础

1.Spring概述

(1)什么是Spring

(2)Spring的下载与目录结构

(3) IoC/DI实现

 二.Spring中的Bean

1.Bean的配置

2.Bean的作用域

3.Bean的装配方式

三.Spring AOP

 1.Spring AOP简介

2.AspectJ开发

(1).基于XML的声明式AspectJ

(2).基于注解的声明式AspectJ

(3). 案例

四.Spring的数据库开发

1.Spring JDBC

2. Spring JdbcTemplate

五.Spring的事务管理

1.事务管理概述

2.声明式事务管理

(1).基于XML方式的声明式事务

(2).基于Annotation方式的声明式事务

(3).声明式事务管理例题


一.Spring基础

Spring 是目前非常流行的Java web 开发框架,用于解决企业应用开发的复杂性问题。对于一个
开发企业级应用的程序员来说,掌握 Spring 框架是必备技能之一。

1.Spring概述

(1)什么是Spring

Spring 是一个以 IOC ( Inversion of Control, 控制反转)和 AOP(Aspect Oriented Programming,
面向切面编程)为内核的框架。IoC 是 Spring 的基础。IoC 实现的是一种控制,简单地说,就是以
前是调用 new 构造方法来创建对象,现在变成了使用 Spring 来创建象。 DI (Dependency Inject,
依赖注入)与IoC 的含义相同,从两个角度描述同一个概念。简单地说,DI就是对象的属性,已经
被注入好相关值,直接使用即可。


(2)Spring的下载与目录结构

打开JFrog

 点击下载,解压后的目录:

 其中lib目录下有63个JAR文件

  • 以 RELEASE.jar 结尾的是Spring框架class 文件的压缩包。
  • 以RELEASE-javadoc.jar 结尾的是Spring 框架 API 文档的压缩包。
  • 以 RELEASE-sources.jar 结尾的是Spring框架源文件的压缩包。

整个Spring框架由21个模块组成,该目录下Spring为每个模块都提供了这3类压缩包。

Spring的基础包说明
包名说明
spring-core-S.2.5.RELEASE.jar包含 Spring 框架基本的核心工具类,Spring 的其他组件都要用到这个包里的类
spring-beans-5.2.5.RELEASE.jar所有应用都要用到的 JAR 包,包含访问配置文件、刨建和管理Bean 以及进行 IoC 或者 DI操作相关的所有类
spring-context-5.2.5.RELEASE.jarSpring 提供了 在基础 IoC 功能上的扩展服务,还提供了许多企业级服务的支持,如任务调度、JDI 定位、EJB 集成、远程访问、缓存、邮件服务以及各种祝图层框架的封装等
spring-expression-5.2.5.RELEASE.jar定义了 Spring 的表达式语言

 第三方依赖包:Apache Commons Logging - Download Apache Commons Logging

 下载后解压

(3) IoC/DI实现

Spring 核心容器
Spring 框架的两个最基本和最重要的包是 org.springframework.beans(该包申的主要接口是BeanFactory)和org.springframework.context(该包中的主要接口是 ApplicationFactory )Spring IoC 框架的主要组件有 Beans、配置文件 applicationContext.xml、BeanFactory 接口及其相关类、ApplicationContext 接口及其相关类。
(1) Beans 是指项目中提供业务功能的 Bean,即容器要管理的 Bean。 Beans 就是一个常见的
JavaBean、Java 类。
(2)在 Spring 中对Bean 的管理是在配置文件中进行的。在 Spring 容器内编辑配置文件管理
Bean 又称为 Bean 的装配,实际上装配就是告诉容器需要哪些 Bean,以及容器是如何使用 IoC 将它们配合起来的。Bean 的配置文件是一个XML 文件,可以为 applicationContext.xml 或其他一般习惯便用 applicationContext.xml 。
配置文件包含 Bean 的 id类、属性及其值,包含一个<beans-元素和数个<bean-子元素。Spring
IoC 框架可根据 Bean 的 id 从Bean 配置文件中取得该 Bean 的类,并生成该类的一个实例对象,继而从配置文件中获得该对象的属性和值。

具体实现参考

Spring中IoC/DI实现注入_无忧#的博客-CSDN博客

 二.Spring中的Bean

1.Bean的配置

Spring 如同一个工厂,用于生产和管理 Spring 容器中的 Bean。要使用这个工厂需要开发者对
Spring 的配置文件进行配置。在实际开发中,,最常采用 XML 格式的配置方式,即通过XML 文件来注册并管理 Bean 之间的依赖关系。
在 Spring 中,XML 配置文件的根元素是<beans>,<beans>中可以包含多个<bean>子元素,每一
个<bean>子元素定义了一个 Bean,并描述了该 Bean 如何被装配到 Spring 容器中。

重要元素属性:

  1. id属性:id为bean的唯一标识名,就是常说的beanName。它必须是合法的XMLID,在整个XML文档中唯一。
  2. name属性:用来为bean id创建一个或多个别名(这里是别名不是beanName),它可以是任意的字母符合,多个别名之间用逗号或空格分开。如果没有定义bean的id,那么第一个别名就会被作为id;如果也没有定义name,那么自动生成一个id和一个别名(这时的别名为类的全类名且类名首子母小写)。
  3. class属性:用来定义类的全限定名(包名+类名)。只有子类Bean不用定义该属性。
  4. parent属性:子类Bean定义它所引用它的父类Bean。这时class属性失效。子类Bean会继承父类Bean的所有属性,子类Bean也可以覆盖父类Bean的属性。注意:子类Bean和父类Bean是同一个Java类。
  5.  scope 属性:默认为singleton(单例)。如果设prototype(原型)状态,BeanFactory将为每次Bean请求创建一个新的Bean实例。
  6. constructor-arg:对bean自动寻找对应的构造函数,并在初始化的时候将设置的参数传入进去
  7.  property:基本数据类型赋值

2.Bean的作用域

Bean的作用域
作用域名称说明
singleton使用 singleton 定义的 Bean 在Spring 容器中将只有一个实例,也就是说,无论有多少个
Bean 引用它,始终将指向同一个对象,这也是 Spring容器默认的作用域
prototype每次通过 Spring 容器获取prototype 定义的 Bean 时,容器都将创建一个新的 Bean 实例
request在一次 HTTP 请求中,容器会返回该 Bean 的同一个实例,对不同的 HTTP 请求则会产
生一个新的Bean,而且该Bean 仅在当前 HTTP Request 内有效
session在一次 HTTP Session 中,容器会返回该Bean 的同一个实例,对不同的 HTTP 请求则会
产生一个新的 Bean,而且该Bean 仅在当前 HTTP Session 内有效
application为每个 ServletContext 对象创建一个实例,仅在Web 相关的 ApplicationContext 中有效
websocket为每个websocket 对象创建一个实例,仅在Web 相关的 ApplicationContext 中生效

3.Bean的装配方式

Bean 的装配可以理解为依赖关系注入,Bean 的装配方式即 Bean依赖注入的方式。Spring 容器
文持多种形式的 Bean 装配方式,如基于 XML 的装配、基于 Annotation(注解,的装配和自动装配等。

具体参考:

Spring中Bean的装配方式以及常见问题_无忧#的博客-CSDN博客

三.Spring AOP

 1.Spring AOP简介

AOP的全称是 Aspect-Oriented Programming,即面向切面编程(也称面向方面编程,它是面向对象编程(OOP)的一种补充,目前已成为一种比较成熟的编程方式。

AOP采取横向抽取机制,将分散在各个方法中的重复代码提取出来,然后在程序编译或运行时,再将这些提取出来的代码应用到需要执行的地方。虽然AOP是一种新的编程思想,但却不是OOP的替代品,它只是OOP的延伸和补充。

目前最流行的AOP框架有两个,分别为Spring AOP AspectJ

AOP术语包括

Aspect(切面):在实际应用中,切面通常是指封装的用于横向插入系统功能(如事务、日志等)的类,该类要被Spring容器识别为切面,需要在配置文件中通过<bean>元素指定

Joinpoint(连接点):在程序执行过程中的某个阶段点,它实际上是对象的一个操作,例如方法的调用或异常的抛出。在Spring AOP中,连接点就是指方法的调用

Pointcut(切入点):是指切面与程序流程的交叉点,即那些需要处理的连接点。通常在程序中,切入点指的是类或者方法名,如某个通知要应用到所有以add开头的方法中,那么所有满足这一规则的方法都是切入点。

Advice(通知增强处理):AOP框架在特定的切入点执行的增强处理,即在定义好的切入点处所要执行的程序代码。可以将其理解为切面类中的方法,它是切面的具体实现。

Target Object(目标对象):是指所有被通知的对象,也称为被增强对象。如果AOP框架采用的是动态的AOP实现,那么该对象就是个被代理对象

Proxy(代理):将通知应用到目标对象之后,被动态创建的对象

Weaving(织入):将切面代码插入到目标对象上,从而生成代理对象的过程

2.AspectJ开发

(1).基于XML的声明式AspectJ

基于XML的声明式 AspectJ是指通过XML文件来定义切面、切入点及通知,所有的切面、切入点和通知都必须定义在< aop: config>元素内。

Spring配置文件中的< beans>元素下可以包含多个< aop: config>元素,一个<aop: config>元素中又可以包含属性和子元素,其子元素包括< aop: pointcut><aop: advisor>< aop: aspect>。在配置时,这3个子元素必须按照此顺序来定义。

①.配置切面

Spring的配置文件中,配置切面使用的是<aop: aspect>元素,该元素会将一个已定义好的Spring Bean转换成切面Bean

配置< aop: aspect>元素时,通常会指定idref两个属性:

< aop: aspect>元素的属性及其描述
属性名称描述
id

用于定义该切面的唯一标识名称。

ref

用于引用普通的Spring Bean

②.配置切入点

Spring的配置文件中,切入点是通过<aop: pointcut>元素来定义的。

在定义< aoppointcut>元素时,通常会指定id expression两个属性

< aop: pointcut>元素的属性及其描述
属性名称描述
id

用于定义切入点的唯一标识名称。

expression

用于指定切入点关联的切入点表达式。

③.配置通知

在配置代码中,分别使用<aop: aspect>的子元素配置了5种常用通知,这5个子元素不支持使用子元素,但在使用时可以指定一些属性

通知的常用属性及其描述
属性名称描述

pointcut

该属性用于指定一个切入点表达式,Spring将在匹配该表达式的连接点时织入该通知。

pointcut-ref

该属性指定一个已经存在的切入点名称,如配置代码中的 myPointcut。通常 pointcutpointcut--ref两个属性只需要使用其中之一。

method

该属性指定一个方法名,指定将切面Bean中的该方法转换为增强处理

throwing

该属性只对< after-throwing>元素有效,它用于指定一个形参名,异常通知方法可以通过该形参访问目标方法所抛出的异常。

returning

该属性只对< after-returning>元素有效,它用于指定一个形参名,后置通知方法可以通过该形参访问目标方法的返回值。

(2).基于注解的声明式AspectJ

基于XML的声明式AspectJ实现AOP编程虽然便捷,但是它也存在着一些缺点,那就是要在Spring文件中配置大量的代码信息。为了解决这个问题,AspectJ框架为AOP的实现提供了一套注解,用以取代 Spring配置文件中为实现AOP功能所配置的臃肿代码。

AspectJ的注解及其描述:

注解名称

描述

@Aspect

用于定义一个切面

@Pointcut

用于定义切入点表达式。在使用时还需定义一个包含名字和任意参数的方法签名来表示切入点名称。实际上,这个方法签名就是一个返回值为void且方法体为空的普通方法

@Before

用于定义前置通知,相当于 BeforeAdvice。在使用时,通常需要指定一个value属性值,该属性值用于指定一个切入点表达式(可以是已有的切入点,也可以直接定义切入点表达式)

@AfterReturning

用于定义后置通知,相当于 AfterReturningAdvice。在使用时可以指定 pointcut/valuereturning属性,其中 pointcut/value两个属性的作用一样,都用于指定切入点表达式,returning属性值用于表示Advice()方法中可定义与此同名的形参,该形参可用于访问目标方法的返回值

@Around

用于定义环绕通知,相当于 MethodInterceptor。在使用时需要指定一个 value属性,该属性用于指定通知被植入的切入点

@AfterThrowing

用于定义异常通知来处理程序中未处理的异常,相当于ThrowAdvice。在使用时可指定pointcut/valuethrowing属性。其中,pointcut/value用于指定切入点表达式,而throwing属性值用于指定一个形参名来表示Advice()方法中可定义与此同名的形参,该形参可用于访问目标方法抛出的异常

@After

用于定义最终final通知,无论是否有异常,该通知都会执行。使用时需要指定一个value属性,用于指定该通知被植入的切入点

@DeclareParents

用于定义引介通知,相当于IntroductionInterceptor(不要求掌握

(3). 案例

详细参考:

Spring AOP开发案例_无忧#的博客-CSDN博客

四.Spring的数据库开发

Spring的JDBC模块负责数据库资源管理和错误处理,大大简化了开发人员对数据库的操作,使得开发人员可以从繁琐的数据库操作中解脱出来,从而将更多的精力投入到编写业务逻辑中。

1.Spring JDBC

针对数据库的操作,Spring框架提供了JdbcTemplate类,该类是Spring框架数据抽象层的基础,JdbcTemplate类是Spring JDBC的核心类。

Spring JDBC配置

包名

说明

core

包含了JDBC的核心功能,包括JdbcTemplate类、SimpleJdbcInsert类、SimpleJdbcCall类以及NamedParameterJdbcTemplate类。

dataSource

访问数据源的实用工具类,它有多种数据源的实现,可以在Java EE容器外部测试JDBC代码。

object

以面向对象的方式访问数据库,它允许执行查询并将返回结果作为业务对象,可以在数据表的列和业务对象的属性之间映射查询结果。

support

包含了core object包的支持类,例如,提供异常转换功能的SQLException类。

dataSource的4个属性

属性名

含义

driverClassName

所使用的驱动名称,对应驱动JAR包中的Driver

url

数据源所在地址

username

访问数据库的用户名

password

访问数据库的密码

2. Spring JdbcTemplate

  •  execute()执行SQL语句
  • update()更新数据
  • query()查询数据

实例参考 :Spring JdbcTempalte常用方法以及例题_无忧#的博客-CSDN博客

五.Spring的事务管理

Spring 的事务管理简化了传统的事务管理流程,并且在一定程度上减少了开发者的工作量。

1.事务管理概述

Spring的所有JAR包中,包含一个名为Spring-tx-5.2.5 RELEASEJAR包,该包就是Spring提供的用于事务管理的依赖包。在该JAR包的 org. springframework.transaction包中,有3个接口文件 PlatformTransaction Manager TransactionDefinition TransactionStatus。

①.PlatformTransactionManager接口是Spring提供的平台事务管理器,主要用于管理事务。该接口中提供了3个事务操作的方法。

TransactionStatus getTransaction :用于获取事务状态信息。
void commit :用于提交事务。
void rollback :用于回滚事务。

②.TransactionDefinition接口是事务定义(描述)的对象,该对象中定义了事务规则,并提供了获取事务相关信息的方法

String getName () :获取事务对象名称。
int getlsolationLeve () :获取事务的隔离级别。
int getPropagationBehavior () :获取事务的传播行为。
i nt setTimeout () :获取事务的超时时间。

         boolean isReadOnly():获取事务是否只读

TransactionStatus接口是事务的状态,它描述了某一时间点上事务的状态信息。该接口中包含6个方法,具体如下。 

void flush() :刷新事务。
boolean hasSavepoint () :获取是否存在保存点。
boolean isCompleted () :获取事务是否完成。
boolean isNewTransaction () :获取是否是新事务。
boolean is RollbackOnly () :获取是否回滚。
void setRollbackOnly () :设置事务回滚。

事务管理方式:

Spring中的事务管理分为两种方式:一种是传统的编程式事务管理,另一种是声明式事务管理。

编程式事务管理:是通过编写代码实现的事务管理,包括定义事务的开始、正常执行后的事务提交和异常时的事务回滚。

声明式事务管理:是通过AOP技术实现的事务管理,其主要思想是将事务管理作为一个“切面”代码单独编写,然后通过AOP技术将事务管理的“切面”代码织入到业务目标类中。

2.声明式事务管理

(1).基于XML方式的声明式事务

基于XML方式的声明式事务管理是通过在配置文件中配置事务规则的相关声明来实现的。

Spring2.0以后,提供了tx命名空间来配置事务,tx命名空间下提供了<tx: advice>元素来配置事务的通知(增强处理)。

(2).基于Annotation方式的声明式事务

Spring的声明式事务管理还可以通过 Annotation(注解)的方式来实现。这种方式的使用非常简单,开发者只需做两件事情:

1)在 Spring容器中注册事务注解驱动;

2)在需要使用事务的 Spring Bean类或者Bean类的方法上添加注解@Transactional

(3).声明式事务管理例题

声明式事务管理例题_无忧#的博客-CSDN博客

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无忧#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值