写点什么

java 程序员:拜托别再问我 Spring 原理了!你问的这篇文章都有

作者:钟奕礼
  • 2022-12-31
    湖南
  • 本文字数:2358 字

    阅读完需:约 8 分钟

前言

我们学习技术的时代赶上了最好的时代,跳过了很多前人经常踩的坑,前人在踩坑的过程中总结了很多经验和教训,而新时代的我们只是继承了前人的经验和教训,而忽略了这些采坑的过程,以至于我们面对很多新技术都不知道他是什么?他为什么存在?他为什么可以解决这个问题?更不知道如何掌握其原理!云里雾里一头雾水!

我希望这篇文章能给各位观众老爷带来一个真正实用的收获,本文会用大量的图形和文字来解析 Spring 原理。

篇幅原因。文章结尾是有答案和解析的!

目录

  • Spring 特点(解析)

  • Spring 核心组件,Spring 常用模块,Spring 主要包,Spring 常用注解,Spring 第三方结合(解析)

  • Spring IOC

  • Spring APO

  • Spring MVC 原理

  • Spring Boot

  • JPA 原理

  • Mybatis 缓存

  • Tomcat

正文

Spring 原理

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。

Spring 特点(解析)

  • 轻量级

  •  控制反转

  •  面向切面

  •  容器

  •  框架集合


Spring 核心组件,Spring 常用模块,Spring 主要包,Spring 常用注解,Spring 第三方结合(解析)

Spring 核心组件


Spring 常用模块


Spring 主要包


Spring 常用注解

bean 注入与装配的的方式有很多种,可以通过 xml,get set 方式,构造函数或者注解等。简单易用的方式就是使用 Spring 的注解了,Spring 提供了大量的注解方式。


Spring 第三方结合


Spring IOC

  • 概念

  • Spring 容器高层视图

  • IOC 容器实现

  • Spring Bean 作用域

  • Spring Bean 生命周期

  • Spring 依赖注入四种方式(解析)

  • 5 种 不同方式的自动装配

Spring 依赖注入四种方式(解析)

构造器注入

/*带参数,方便利用构造器进行注入*/

public CatDaoImpl(String message){

this. message = message;

}

<bean id="CatDaoImpl" class="com.CatDaoImpl">

<constructor-arg value=" message "></constructor-arg>

</bean>

setter 方法 注入

public class Id {

private int id;

public int getId() { return id; }

public void setId(int id) { this.id = id; }

}

<bean id="id" class="com.id "> <property name="id" value="123"></property> </bean>

静态工厂注入

静态工厂顾名思义,就是通过调用静态工厂的方法来获取自己需要的对象,为了让 spring 管理所有对象,我们不能直接通过"工程类.静态方法()"来获取对象,而是依然通过 spring 注入的形式获取

public class DaoFactory { //静态工厂

public static final FactoryDao getStaticFactoryDaoImpl(){

return new StaticFacotryDaoImpl();

}

}

public class SpringAction {

private FactoryDao staticFactoryDao; //注入对象

//注入对象的 set 方法

public void setStaticFactoryDao(FactoryDao staticFactoryDao) {

this.staticFactoryDao = staticFactoryDao;

}

}

//factory-method="getStaticFactoryDaoImpl"指定调用哪个工厂方法

<bean name="springAction" class=" SpringAction" >

<!--使用静态工厂的方法注入对象,对应下面的配置文件-->

<property name="staticFactoryDao" ref="staticFactoryDao"></property>

</bean>

<!--此处获取对象的方式是从工厂类中获取静态方法-->

<bean name="staticFactoryDao" class="DaoFactory"

factory-method="getStaticFactoryDaoImpl"></bean>

实例工厂

实例工厂的意思是获取对象实例的方法不是静态的,所以你需要首先 new 工厂类,再调用普通的实例方法:

public class DaoFactory { //实例工厂

public FactoryDao getFactoryDaoImpl(){

return new FactoryDaoImpl();

}

}

public class SpringAction {

private FactoryDao factoryDao; //注入对象

public void setFactoryDao(FactoryDao factoryDao) {

this.factoryDao = factoryDao;

}

}

<bean name="springAction" class="SpringAction">

<!--使用实例工厂的方法注入对象,对应下面的配置文件-->

<property name="factoryDao" ref="factoryDao"></property>

</bean>

<!--此处获取对象的方式是从工厂类中获取实例方法-->

<bean name="daoFactory" class="com.DaoFactory"></bean>

<bean name="factoryDao" factory-bean="daoFactory"

factory-method="getFactoryDaoImpl"></bean>

更多解析


Spring APO

文章资料都整理在一个文档里面了,需要的小伙伴可以+ VX: w15629032679

  • 概念

  • AOP 核心概念

  • AOP 两种代理方式

  • 实现原理


Spring MVC 原理

  • MVC 流程

  • MVC 常用注解


Spring boot 原理

文章资料都整理在一个文档里面了,需要的小伙伴可以+ VX: w15629032679

  • 创建独立的 Spring 应用程序

  • 嵌入的 Tomcat ,无需部署 WAR 文件

  • 简化 Maven 配置

  • 自动配置 Spring

  • 提供生产就绪型功能,如指标,健康检查和外部配置

  • 绝对没有代码生成和对 XML 没有要求配置 [1]


JPA 原理

  • 事物

  • 本地事物

  • 分布式事物

  • 两阶段提交(解析)

两阶段提交

两阶段提交主要保证了分布式事务的原子性:即所有结点要么全做要么全不做,所谓的两个阶段是指:第一阶段:准备阶段;第二阶段:提交阶段。


1、准备阶段

事务协调者(事务管理器)给每个参与者(资源管理器)发送 Prepare 消息,每个参与者要么直接返回失败(如权限验证失败),要么在本地执行事务,写本地的 redo 和 undo 日志,但不提交,到达一种“万事俱备,只欠东风”的状态。

2、提交阶段

如果协调者收到了参与者的失败消息或者超时,直接给每个参与者发送回滚(Rollback)消息;否则,发送提交(Commit)消息;参与者根据协调者的指令执行提交或者回滚操作,释放所有事务处理过程中使用的锁资源。(注意:必须在最后阶段释放锁资源)

Mybatis 缓存

  • Mybatis 的一级缓存原理 ( sqlsession 级别 )

  • 二级缓存原理 ( mapper 基本 )


Tomcat 架构


最后

资料已整理成文档,免费获取,需要的小伙伴可以+ VX: w15629032679

还有更多资料包含 Spring,MyBatis,Netty 源码分析,高并发、高性能、分布式、微服务架构的原理,JVM 性能优化这些成为架构师必备的知识体系。相信对于已经工作和遇到技术瓶颈的码友,在这里会有你需要的内容。

用户头像

钟奕礼

关注

还未添加个人签名 2021-03-24 加入

还未添加个人简介

评论

发布
暂无评论
java程序员:拜托别再问我Spring原理了!你问的这篇文章都有_程序员_钟奕礼_InfoQ写作社区