Sping 学习笔记

请添加图片描述

网站

官网:Spring.io
mvnrepository.com

Spring是一个全家桶,都基于底层Spring Framework搭建的工具框架

SpringBoot是为了加速开发效率而产生的框架

目前使用的是Spring Framework 4.x的架构图(趋于稳定)
在这里插入图片描述
核心容器:Core Container(装对象)

AOP:面向切面编程(不惊动原始程序,给他增加功能)

Aspects:AOP思想实现

学习路线
在这里插入图片描述

IoC(Inversion of Control)控制反转

目的:降低耦合性。对象的创建控制权由程序转移到外部。

private BookDao bookDao = new BookDao();

=> private BookDao bookDao;

Spring技术对IoC思想进行了实现

Spring提供了一个容器,称为IoC容器,用来充当IoC思想中的"外部"(IoC容器管理大量的对象)

IoC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在Ioc容器中统称为Bean

DI ( Dependency Injection )依赖注入

在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入

**目的:**充分解耦
使用IoC容器管理bean (IoC)
在IoC容器内将有依赖关系的bean进行关系绑定(DI)
最终效果:使用对象时不仅可以直接从IoC容器中获取,并且获取到的bean已经绑定了所有的依赖关系

IoC入门案例思路分析

1.管理什么? ( Service与Dao )
2.如何将被管理的对象告知IoC容器?(配置)
3.被管理的对象交给IoC容器,如何获取到Ioc容器?(接口)4.Ioc容器得到后,如何从容器中获取bean ?(接口方法)
4.Ioc容器得到后,如何从容器中获取bean ?(接口方法)
5.使用Spring导入哪些坐标? ( pom.xml )

– 实操

①导入spring坐标spring-context坐标

在pom.xml配置文件配置坐标

<dependencies>

  <dependency>

    <groupId>org.springframework<groupId>

    <artifactId>spring-context<artifactId>

    <version>5.2.10.RELEASE<version>

  </dependency>

</dependencies>

在app中创建applicationContext.xml

②在applicationContext.xml配置bean

③获得Ioc容器(main方法)

// ApplicationContext 是接口,new实现类

ApplicationContext ctx = ClassPathXmlApplicationContext(“applicationContext.xml”);

④获得bean(main方法)

BookDao bd = (BookDao) ctx.getBean(“BookDao”);

调用bookDao方法

DI入门案例

  1. 基于IoC管理bean
  2. Service中使用new形式创建的Dao对象是否保留?(否)
  3. Service中需要的Dao对象如何进入到service中?(提供方法)
  4. Service与Dao间的关系如何描述?(配置)

– 实操

删除业务层中使用new方式创建的dao对象

SeviceImpl类 提供对应的set方法。

配置service与dao的关系(绑定),dao放到service

property标签表示配置当前bean的属性
name 属性表示配置哪一个具体的属性
ref 属性表示参照哪一个bean

<bean id="bookService" class="com.itheima.xx">

  <property name="bookDao"【类中名】 

                ref="bookDao"【容器中的名】>

</bean>

在这里插入图片描述

bean配置

bean基础配置 id,name,class
bean别名配置

bean中的name属性起别名,使用“逗号分号空格”分隔,可被getbean()、ref=“”,

注意事项:获取bean无论是通过id还是name获取,如果无法获取到,将抛出异常NoSuchBeanDefinitionException

bean作用范围配置

bean默认是单例(scope=“singleton”),非单例 prototype

为什么bean默认为单例?

若非单例,则Ioc容器有无穷无尽个bean,spring不适合管理bean

适合交给容器进行管理的bean

表现层对象(sevlet)、业务层对象(service)、数据层对象(dao)、工具对象

不适合交给容器进行管理的bean

封装实体的域对象(domain),里面有状态,有数据,已经记录成员变量的属性值

bean实例化

创建形式

spring创建时,调的是无参构造方法

spring创建时,private构造方法也能被调用(底层使用了反射)

实例化bean的三种方式

1、构造方法实例化bean。

实现类的构造方法。无参构造方法不存在,BeanCreateEception

2、使用静态工厂实例化bean(解耦)

  • 静态工厂
public class OrderDaoFactory {

  public static OrderDao getOrderDao(){

    return new OrderDaoImpl();

  }

}

3、使用实例工厂实例化bean
在这里插入图片描述
3.1 (实用) 使用FactoryBean 实例化bean(大量的框架都在这样和spring打交道)
在这里插入图片描述

bean生命周期

控制生命周期结束前do sth

①使用关闭容器方法(配置方式)

注意:虚拟机退出并没有bean销毁机制,执行destroy方法

解决:主动关闭容器(暴力)

new ClassPathXmlApplicationContext(“applicationContext.xml”).close();

关闭钩子(可放在任意位置)

ctx.registerShutdownHook();

②使用spring提供的接口控制生命周期

implements InitializingBean,DisposabelBean接口

afterPropertiesSet() 和 destroy()

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

依赖注入方式

在这里插入图片描述

setter注入

在这里插入图片描述

构造器注入

①标准书写配置(耦合度高,参数改名就不行)

②解决参数名称问题,与形参不耦合

name → type=“java.lang.String” 指定参数类型

③解决参数类型重复问题

name → index=“0” 位置

在这里插入图片描述
1、强制依赖:必须全部注入,否则无法创建对象

依赖自动装配

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

注入集合对象

在这里插入图片描述
List(重点)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

数据源对象管理

第三方资源配置管理

添加坐标,在pom.xml,dependencies中

druid

管理DruidDataSource对象

C3p0连接池

1、 mvnrespository.com 找坐标

2、pom.xml找到C3p0连接池对象

com.mchange.v2.c3p0.ComboPooledDataSource

3、逐个试试名字

mysql坐标

1、 mvnrespository.com 找坐标

加载properties文件

resources / jdbc.properties

①开启context命名空间

在这里插入图片描述
在这里插入图片描述
②使用context空间加载properties文件

<context:property-placeholder location=“jdbc.properties”/>

**不加载系统环境变量:**system-properties-mode=“NEVER”

加载多个配置文件:location=“classpath: *.properties”

加载外工程(jar包)的多个配置文件:location=“classpath*****: *.properties”

在这里插入图片描述
③使用属性占位符${}读取properties文件中的属性
在这里插入图片描述

容器

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

~~总结

请添加图片描述

容器

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

注解开发

@component(“”) 相当于配置了一个bean

扫描包

xml:<context:component-scan base-package=“com.it”>

在这里插入图片描述
衍生注解
在这里插入图片描述

纯注解开发(配置类)

配置类(替换xml)

com.it.config.SpringConfig

@Configuration

@ComponentScan(“com.it”)

class{}

Main类

new AnnotationConfigApplicationContext(SpringConfig.class);

从xml配置形式 → 读取配置类
ClassPathXmlApplictionContext → AnnotationConfigApplicationContext

注解开发bean范围与生命周期

@Scope(“prototype”) 非单例

class{}

@PostConstruct 构造方法后

function(){}

@PreDestroy 摧毁方法前

function(){}

依赖注入(自动装配)

@Autowired 暴力反射,无需setter入口

private BookDao bookDao;

在这里插入图片描述
SpringConfig.class 添加 @PropertySource(“jdbc.properties”)

@Value(“${name}”)

String name;

在这里插入图片描述

第三方bean管理(jar包)

处理:在SpringConfig.class中导入@Import(JdbcConfig.class)

在JdbcConfig.class编程去写(没有其他办法)

2、添加@Bean方法返回值定义成bean

@Bean

1、定义一个方法获得要管理的对象

public DataSource datasource() {

DruidDataSource ds = new DruidDataSource();

配置属性

ds.setDriverClassName(“”); 使用@Value注入

ds.setUrl(“”);

ds.setUsername(“”);

ds.setPassword(“”);

return ds;

}

在这里插入图片描述
扫描式(不推荐)
在这里插入图片描述
在这里插入图片描述
引用类型(自动装配)
在这里插入图片描述

~~注解开发总结

请添加图片描述

XML配置 vs 注解配置

在这里插入图片描述

====================

Spring 整合mybatis

核心对象SqlSessionFactory
mybatis独立开发
SqlMapConfig.xml
https://blog.csdn.net/qq_46020525/article/details/128013377
SqlMapConfig.xml
mybaties应该管理核心对象SqlSessionFactory

①插入坐标dependency

  • mybatis
  • spring-jdbc:spring操作与数据库有关的坐标
  • mybatis-spring:mybatis与spring整合用的坐标

② 整合mybatis:配置文件,数据源配置,jdbc配置
SqlSessionFactoryBean 专门用来造对象
MapperScannerConfigurer 代理点
在这里插入图片描述
在这里插入图片描述

Spring整合Junit

① 依赖包
在这里插入图片描述
Test路径 /src/test/java/com.it.service.AccountServiceTest

//测试类
@RunWith(SpringJUnit4ClassRunner.class)  //专用类加载/运行器
@ContextConfiguration(classes = SpringConfig.class)  //指定Spring配置(Bean处)
public class AccountServiceTest {
    @Autowired
    AccountService accountService;

    @Test
    public void testFindById() {
        System.out.println(accountService.findById(2));
    };
}

AOP 面向切面编程

在这里插入图片描述
一种编程范式,指导开发者如何组织程序结构

  • 作用:在不惊动原始设计(不需改动源代码)的基础上为其进行功能增强
  • Spring理念:无入侵式编程

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

入门案例

Aspect包

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.4</version>
</dependency>

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

AOP工作流程

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

切入点表达式

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

AOP通知类型

在这里插入图片描述

在这里插入图片描述

标准写法,方法返回Object

@Around
public Object around(ProceedingJoinPoint pjp) throws Throwable{
	println();
	Object ret = pjp.proceed();
	println();
	return ret;
}

使用最高
使用少
使用少

@案例:测量业务层接口万次执行效率

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

AOP通知获取信息

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

案例:密码数据兼容处理(trim)

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

~~AOP总结

在这里插入图片描述
在这里插入图片描述
通知类型
在这里插入图片描述

Spring事务 + 案例

案例:银行账户转账
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
@Transactional
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

事务角色

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

事务属性(追加日志)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
事务传播行为

SpringMVC

  • SpringMVC为表现层框架,也可以称作web框架
    目录
    在这里插入图片描述
    架构

SpringMVC简介

在这里插入图片描述

入门案例

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

在这里插入图片描述

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

工作流程

在这里插入图片描述

bean加载控制

在这里插入图片描述
在这里插入图片描述
简化开发

apiFox 调试工具

  • Postman

请求映射路径

映射路径前缀:加在类名上一行
@RequestMapping(“”)
在这里插入图片描述

GET & POST请求

中文乱码处理

五种参数类型传递

在这里插入图片描述
普通参数
对象
嵌套

数组
集合对象

JSON 数据传参

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

日期参数传递

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

响应

无@ResponseBody,返回的是文件页面
对象转成json数据,return new User(); 底层并不是springmvc处理,而是jackson类型转换器做的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

REST风格

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

入门案例

http://t.csdn.cn/XqyMH
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

RESTful快速开发(简化)

小结:

  1. RESTful快速开发(标准开发)
  2. @RestController
  3. 标准请求动作映射(4种)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

~~案例

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

SSM整合

表现层数据封装
异常处理器
项目异常处理方案
案例:SSM整合标准开发

在这里插入图片描述

<dependencies>
	1 spring-jdbc
	1 mysql-connector-java
	1 druid
	3 mybatis
	3 mybatis-spring
	2 spring-test
	2 junit
	4 spring-webmvc
	4 javax-sevlet-api
	0 jackson-databind
</dependencies>
<build>
	tomcat7-maven-plugin
</bulid>

在这里插入图片描述

表现层与前端数据传输协议

小结

  1. 表现层数据封装
  2. Result
  3. Code
    在这里插入图片描述

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

异常处理器

在这里插入图片描述

项目异常处理

项目异常处理方案

  • 异常处理器
  • 自定义异常
  • 异常编码
  • 自定义消息
    在这里插入图片描述

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

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

拦截器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
简化开发
在这里插入图片描述

拦截器参数

在这里插入图片描述
在这里插入图片描述
SpringMvc异常处理机制完美替换

拦截器链

在这里插入图片描述

- 分模块开发 -

  • 分模块开发与设计
  • 依赖管理
  • 聚合与继承
  • 属性管理
  • 多环境配置与应用
  • 私服

目标:

  1. 理解分模块开发的意义
  2. 能够使用聚合工程快速构建项目
  3. 能够使用继承简化项目配置
  4. 能够根据需求配置生产、开发、测试环境,并在各环境间切换运行
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

依赖传递

在这里插入图片描述

可选依赖、排除依赖

<optional>true
<exclusion><exclusions>

聚合、继承

继承:选择性


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

属性

在这里插入图片描述
主要配置版本号

配置文件加载属性

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

多环境开发

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

跳过测试 快速打包

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

私服

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

私服仓库

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

本地仓库访问私服

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

SpringBoot

学习目标

  1. 掌握基于SpringBoot框架的程序开发步骤
  2. 熟练使用SpringBoot配置信息修改服务器配置
  3. 基于SpringBoot的完成SSM整合项目开发

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

SpringBoot快速启动

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

简介(起步依赖)

在这里插入图片描述

切换Web服务器

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

基础配置

主用yml(可以存储对象)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

logging:
	level:
		root: debug(较多内容) | warn(常用) | info(默认)

yaml格式

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

读取yaml数据

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

yml多环境配置

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

启动命令

在这里插入图片描述
优先级

多环境开发兼容

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

配置文件分类

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

SpringBoot整合Junit

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

整合Mybatis

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

MyBatis Plus

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

简介

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

lombok

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

分页功能

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

热部署

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId><optional>true</optional>
</dependency>

在这里插入图片描述

日志框架

log4j
日志门面 slf4j(适配器,桥接器) --目前最好用
适配器:将别的日志都转换为slf4j门面
桥接器:slf4j实现某个具体日志

java.util.logging(jul)

日志门面:jakarta Commons Logging(不实现日志功能,整合日志)
原理使用ClassLoader找类,对于自定义类,容易出现内存溢出

日志实现日志门面
log4jJCL
julslf4j
log4j2
logback

桥接器(整合):

<slf4j-api>
<slf4j-log4j>

适配器(over):
<jcl-over-slf4j
<jul-to-slf4j

log4j(控制台输出白色字)
jul(控制台输出红色字)

日志优先

trace < info < debug < warn < error < fatal

springboot 整合logback

SpringBoot日记代码步骤

1、声明日志记录器
Logger logger = LoggerFactory.getLogger(Application.class)
或者
@Slf4j —— Lombok(不建议使用,侵入性太强)
  • pattern格式(springboot官网4.7章节中)
    %clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint}
    = %clr( %d{${value:value2}} ) {faint}
    clr = color; faint = 无色
    if (value == null) → ${value2} 【null表达式】

输出到文件File output

logging.file.name/path

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值