Spring基础入门(一)之 理论&基础概念

前言

这篇文章主要是介绍Spring主要的一些理论&基本概念(尽量不贴代码)
具体实战操作可以见 Spring(二)实战
常见面试题可以见Spring(三)面试(其实搞懂这篇文章,三的面试题就不难了,当然也可以用来查漏补缺)

Spring 体系结构

开局一张图

在这里插入图片描述

IOC&DI

Spring最重要的两大概念之一 —— IOC / DI

1.Ioc控制反转

(1)为什么引入Ioc?

之前Web开发中代码耦合度过高

业务层需要调用数据层的方法,就需要在业务层new数据层的对象。如果数据层的实现类发生变化,那么业务层的代码也需要跟着改变,发生变更后,都需要进行编译打包和重部署。如下图:

在这里插入图片描述

(2)所以提出解决方案——控制反转:

IOC:使用对象时,由主动new产生对象转换为由外部提供对象;此过程中对象创建控制权由程序转移到外部——此思想称为控制反转。

(3)怎么实现IoC?

  • Spring提供了一个容器,称为IOC容器,用来充当IOC思想中的"外部"
  • IOC容器负责对象的创建、初始化等一系列工作,其中包含了数据层和业务层的类对象
  • 被创建或被管理的对象在IOC容器中统称为Bean或Bean对象

2.DI依赖注入

(1)为什么要依赖注入?

当IOC容器中创建好service和dao对象后,程序能正确执行么?——不行,因为service运行需要依赖dao对象(所以需要绑定两者)

(2)解决方案——依赖注入

DI:在容器中建立bean与bean之间的依赖关系的整个过程

在这里插入图片描述

3.目标

  • 使用IOC容器管理bean(IOC)
  • 在IOC容器内将有依赖关系的bean进行关系绑定(DI)
  • 最终结果为:使用对象时不仅可以直接从IOC容器中获取,并且获取到的bean已经绑定了所有的依赖关系.

IOC相关之bean

(后面都会用注解开发代替,这里还是采用标签)

1.bean的基础配置

通过bean标签的属性来进行基础配置

在这里插入图片描述

为什么bean默认为单例(singleton)?

  • bean为单例的意思是在Spring的IOC容器中只会有该类的一个对象
  • bean对象只有一个就避免了对象的频繁创建与销毁,达到了bean对象的复用,性能高

2.bean的实例化

对象已经能交给Spring的IOC容器来创建了,但容器如何来创建对象的呢?——bean的实例化过程

常见三种方法,主要是构造方法和factorybean

方法 描述
构造方法实例化
静态工厂实例化
实例工厂实例化

3.bean的生命周期

bean对象从创建到销毁的整体过程。

最后以一张图总结bean相关:

在这里插入图片描述

4.IOC管理第三方bean

之前的类都是我们自己创建的,所以可以方便的交给IOC去管理,但是如果要用到第三方类/jar包,该怎么配置管理?
(标签配置类的方法略过,直接用下面的注解管理!)

DI相关之注入

(简单介绍下,后面有注解开发

(1)setter注入
对于引用数据类型使用的是<property name="" ref=""/>

对于简单数据类型使用的是<property name="" value=""/>

(2)构造器注入

(3)自动装配
IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配——添加autowire属性

依赖注入相关:

在这里插入图片描述

注解开发

1.介绍

为什么要用注解开发?——简化配置开发(之前IOC和DI的实现都需要写在applicationContext.xml配置文件的bean标签中)

怎么实现注解开发?——删除原来的bean标签,直接在类上方添加@Component注解(注解在哪个类上方这个类就是bean)。如:

@Component("bookDao")
public class BookDaoImpl implements BookDao {
    
    
    public void save() {
    
    
        System.out.println("book dao save ..." );
    }
}

与配置文件的对应关系是:

在这里插入图片描述

纯注解开发模式:使用Java类替代配置文件,即在配置类上添加@Configuration注解,将其标识为一个配置类,替换applicationContext.xml。然后在配置类上添加包扫描注解

@Configuration
@ComponentScan("com.itheima")
public class SpringConfig {
    
    
}

2.注解之bean&DI

将前面bean和DI通过配置实现的内容都换成对应的注解实现!

(1)bean

@Scope("prototype")——@Scope设置bean的作用范围(将某个类变成非单例)
@PostConstruct ——在构造方法之后执行,替换 init-method
@PreDestroy ——在销毁方法之前执行,替换 destroy-method

在这里插入图片描述

(2)DI依赖注入

@Autowired注解:写在属性上并将setter方法删除掉,自动装配

@Qualifier注解:指定注入哪个名称的bean对象,不能独立使用,和@Autowired一起使用
@Value——从properties配置文件中读取内容进行使用

3.注解管理第三方bean

@bean——将方法的返回值制作为Spring管理的一个bean对象
@Import——手动引入需要加载的配置类

4.常见注解的含义

名称 类型 位置 作用
@Component 类注解 类定义上方 设置该类为Spring管理的Bean
@Configuration 类注解 类定义上方 设置该类为Spring配置类
@ComponentScan 类注解 类定义上方 设置spring配置类扫描路径,用于加载使用注解格式定义的bean
@Scope 类注解 类定义上方 设置该类创建对象的作用范围
可用于设置创建出的bean是否为单例对象
@Autowired 属性注解 或 方法注解 属性定义上方 或 标准set方法上方 或 类set方法上方 为引用类型属性设置值
@Qualifier 属性注解 或 方法注解 属性定义上方 或 标准set方法上方 为引用类型属性指定注入的beanId
@Value 属性注解 或 方法注解 属性定义上方 或 标准set方法上方 为 基本数据类型 或 字符串类型 属性设置值
@Bean 方法注解 方法定义上方 设置该方法的返回值作为spring管理的bean
@Import 类注解 类定义上方 导入配置类

XML配置与注解对照图:

在这里插入图片描述

AOP

Spring最重要的两大概念之二 —— AOP

1.介绍

AOP(Aspect Oriented Programming):面向切面编程,一种编程范式,指导开发者如何组织程序结构。

作用:在不改动原始设计的基础上为其进行功能增强

2.核心概念

(1)连接点((JoinPoint)
程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等,在SpringAOP中,理解为方法的执行

(2)切入点(Pointcut)
匹配连接点的式子(需要增强的方法
在SpringAOP中,一个切入点可以描述一个具体方法,也可匹配多个方法

(3) 通知(Advice)
在切入点处执行的操作,也就是共性功能(最终以存放共性功能的方法呈现)

(4)通知类
定义通知的类,通知一般是方法,所以需要写在类中,这个类就是通知类

(5)切面(Aspect)
描述通知与切入点的对应关系

具体可以看下图:

在这里插入图片描述

3.常见注解

名称 类型 位置 作用
@EnableAspectJAutoProxy 配置类注解 配置类定义上方 开启注解格式AOP功能
@Aspect 类注解 切面类定义上方 设置当前类为AOP切面类
@Pointcut 方法注解 切入点方法定义上方 设置切入点方法
@Before 方法注解 通知方法定义上方 设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法前运行

AOP事务管理

1.Spring事务

事务其实是在Mysql数据库中最先接触,事务的作用是:在数据层保障一系列的数据库操作同成功同失败

Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败

为什么业务层也需要事务?

  • 转账业务会有两次数据层的调用,一次是加钱一次是减钱
  • 把事务放在数据层,加钱和减钱就有两个事务
  • 没办法保证加钱和减钱同时成功或者同时失败
  • 这个时候就需要将事务放在业务层进行处理

相关注解

名称 类型 位置 作用
@EnableTransactionManagement 配置类注解 配置类定义上方 设置当前Spring环境中开启注解式事务支持
@Transactional 接口注解,类注解,方法注解 业务层接口上方,业务层实现类上方,业务方法上方 为当前业务层方法添加事务(如果设置在类或接口上方则类或接口中所有方法均添加事务)

2.事务角色

事务管理员:发起事务方,在Spring中通常指代业务层开启事务的方法

事务协调员:加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法

3.事务属性

猜你喜欢

转载自blog.csdn.net/ji_meng/article/details/127189430