java 程序员:拜托别再问我 Spring 原理了!你问的这篇文章都有
前言
我们学习技术的时代赶上了最好的时代,跳过了很多前人经常踩的坑,前人在踩坑的过程中总结了很多经验和教训,而新时代的我们只是继承了前人的经验和教训,而忽略了这些采坑的过程,以至于我们面对很多新技术都不知道他是什么?他为什么存在?他为什么可以解决这个问题?更不知道如何掌握其原理!云里雾里一头雾水!
我希望这篇文章能给各位观众老爷带来一个真正实用的收获,本文会用大量的图形和文字来解析 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 性能优化这些成为架构师必备的知识体系。相信对于已经工作和遇到技术瓶颈的码友,在这里会有你需要的内容。
评论