Spring

本文介绍了Spring框架中的核心概念,包括IoC(控制反转)和DI(依赖注入),以及如何通过XML配置和注解管理Bean。还涉及了MyBatis的集成,包括数据库配置、Mapper接口的使用。此外,文章还提到了Spring的AOP支持和事务管理,阐述了面向切面编程的基本概念和事务传播行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring核心概念

IoC(Inversion of Control) 控制反转,将对象的创建控制权转移到外部,由IOC容器来进行提供。
IoC容器:负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean。
DI(Dependence Injection)依赖注入,在容器中建立Bean与Bean之间的依赖关系。
目标:充分解耦
使用IoC容器管理Bean(IoC)
在IoC容器中将有依赖关系的bean进行绑定(DI)

IOC容器

1.导入spring坐标
在pom.xml文件中导入依赖,并且要定义spring要管理的类

		<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>

2.创建一个spring配置文件,配置对应类作为spring管理的bean

	<?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">
<!--    2、配置bean,配置的是实现类
        id:表示给bean起名字
        class:表示给bean定义类型-->
    <bean id="bookDao" class="dao.impl.BookDaoImpl"/>
    <bean id="bookService" class="service.impl.BookServiceImpl"/>
</beans>

3.初始化IOC容器,通过容器获取bean

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
bookDao.save();

BookService bookService = (BookService) ctx.getBean("bookService");
bookService.save();

DI

4.删除业务层中使用new方法创建的dao对象
5.提供对应的set方法
6.在配置文件中配置关系

<bean id="bookService" class="service.impl.BookServiceImpl">
<!--        配置service与dao的关系
            property标签表示配置当前bean的属性
            name属性表示配置哪一个具体属性
            ref属性表示参照哪一个bean-->
        <property name="bookDao" ref="bookDao"/>
</bean>

bean的配置

bean的基础配置

在这里插入图片描述

bean的别名配置

在这里插入图片描述

bean的作用范围

在这里插入图片描述

  • IOC容器适合管理单例的bean
  • 表现层对象
  • 业务层对象
  • 数据层对象
  • 工具对象

实例化bean的四种方式

  1. 使用构造方法
    在这里插入图片描述
  2. 使用静态工厂
    在这里插入图片描述
  3. 使用实例工厂
    在这里插入图片描述
  4. 使用FactoryBean(重点)
    在这里插入图片描述

bean的生命周期控制

  1. 在配置中配置初始化和销毁方法
    在这里插入图片描述
  2. 实现接口
    在这里插入图片描述

依赖注入方式

setter注入
  1. 引用类型
    在这里插入图片描述
  2. 简单类型
    在这里插入图片描述
构造器注入
  1. 引用类型
    在这里插入图片描述
  2. 简单类型
    在这里插入图片描述
依赖自动装配

在这里插入图片描述

集合注入
加载properties文件

在这里插入图片描述

容器

创建容器

在这里插入图片描述

获取bean

在这里插入图片描述

bean相关

在这里插入图片描述

依赖注入相关

在这里插入图片描述

注解

定义bean

在这里插入图片描述

纯注解开发

在这里插入图片描述
在加载容器也需要使用纯注解开发形式
在这里插入图片描述

bean的作用范围

在这里插入图片描述

bean的生命周期

在这里插入图片描述

依赖注入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

加载properties文件

在这里插入图片描述

第三方bean管理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第三方bean依赖注入

在这里插入图片描述
在这里插入图片描述

XML配置对比注解配置在这里插入图片描述

mybatis使用

  1. 首先在数据库中创建对应的表
  2. 创建模块,导入坐标
    在maven工程中的pom.xml中添加依赖
<dependencies>
<!--        mybatis的依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
<!--        MySQL的依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
<!--        Junit的依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>
<!--        添加日志方面的依赖-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.5.6</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
    </dependencies>
  1. 编写mybatis配置文件
    创建一个mybatis-config.xml的文件,在其中写入一下信息
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
<!--                数据库连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis?useSSL=false&amp;allowPublicKeyRetrieval=true"/>
                <property name="username" value="root"/>
                <property name="password" value="qw123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
<!--        加载MySQL映射文件-->
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>
  1. 编写sql映射文件
    创建一个对应类的Mapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
    <select id="selectAll" resultType="com.pojo.User">
        select * from tb_user;
    </select>
</mapper>
  1. 编码
//1、加载mybatis的核心配置文件,获取SqlSessionFactory对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2、获取SqlSession对象,用它来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3、执行sql语句
        List<User> list = sqlSession.selectList("test.selectAll");
        System.out.println(list);

        //4、释放资源
        sqlSession.close();
Mapper代理
  1. 首先需要定义一个与sql映射文件同名的Mapper接口,然后将sql映射文件与对应的Mapper接口放在同一个目录下
  2. 将sql映射文件中的namesapce改为接口的全路径
  3. 在Mapper接口中需要创建一个对应的方法,返回值与参数也需要与映射文件中的对应
  4. 进行编码
//3、获取userMapper接口的代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.selectAll();
        System.out.println(users);

spring整合mybatis

  1. 将配置文件中的字段整合为一个bean
    在这里插入图片描述
  2. 对于映射配置,也将其整合为一个bean
    在这里插入图片描述

spring整合junit

在这里插入图片描述

AOP

面向切面编程,一种编程范式,知道开发者如何组织程序架构
作用:在不惊动原始设计的基础上为其进行功能增强
核心概念:
在这里插入图片描述

AOP的简单使用
  1. 导入相关坐标
    在这里插入图片描述
  2. 定义接口与实现类
    在这里插入图片描述
  3. 定义通知类
    在这里插入图片描述
  4. 定义切入点
    在这里插入图片描述
  5. 绑定切入点与通知的关系
    在这里插入图片描述
  6. 定义通知类受spring容器管理,并定义当前类为切面类
    在这里插入图片描述
  7. 开启spring对AOP注解驱动支持
    在这里插入图片描述
AOP的工作流程

在这里插入图片描述

AOP切入点表达式
  • 标准格式
    在这里插入图片描述
  • 使用通配符
    *在参数中是必须最少得有一个参数,而…在参数中是可以有也可以没有参数
    在这里插入图片描述
    在这里插入图片描述
AOP的通知类型

分为5种类型

  1. 前置通知
    在这里插入图片描述
  2. 后置通知
    在这里插入图片描述
  3. 环绕通知(重点)
    在这里插入图片描述
    在这里插入图片描述
  4. 返回后通知
    在这里插入图片描述
  5. 抛出异常后通知
    在这里插入图片描述

在环绕通知中可以通过参数pjp获取方法中的信息

//获取执行签名信息
Signature signature = pjp.getSignature();
//通过签名获取执行类型(接口名)
String typeName = signature.getDeclaringTypeName();
//通过签名获取操作名称(方法名)
String name = signature.getName();
AOP通知获取数据
  1. 获取方法的调用参数
    在这里插入图片描述
  2. 获取方法的返回值
    在这里插入图片描述
  3. 获取方法抛出的异常信息
    在这里插入图片描述

Spring事务

  1. 在业务层接口上添加Spring事务管理
    在这里插入图片描述
  2. 设置事务管理器
    在这里插入图片描述
  3. 开启注解式事务驱动
    在这里插入图片描述
事务的相关配置

在这里插入图片描述

事务的传播行为

在这里插入图片描述
事务管理员:发起事务方,在Spring中通常指代业务层开启事务的方法
事务协调员:加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值