spring材料整理

1.SSM(spring+springMVC+mybatis)

SSM简介 -

IT总结 | Spring、SpringMVC、SpringBoot、SpringCloud之间的关系 -



2.spring中bean的加载过程

实例化——初始化——销毁

实例化Instantiation:在JVM中创建了实例,所有的属性为null,会调用createBeanInstance()方法,该阶段主要是从beanDefinitionMap循环读取bean,获取它的属性,然后利用反射(core包下有ReflectionUtil会先强行将构造方法setAccessible(true))读取对象的构造方法

初始化:一个是属性填充,另一个就是具体的初始化过程,方法BeanPostProcessor

BeanFactory:bean 工厂类接口,是负责生产和管理bean的工厂,是IOC容器最底层和基础的接口,spring用它来管理和装配普通bean的IOC容器,它有多种实现,比如AnnotationConfigApplicationContext、XmlWebApplicationContext;

FactoryBean:属于spring的一个bean,在IOC容器的基础上给Bean的实现加上了一个简单工厂模式装饰模式,是一个可以生产对象和装饰对象的工厂bean,由spring管理,生产的对象是由getObject()方法决定的。注意:它是泛型的,只能固定生产某一类对象

循环依赖问题:三层缓存,缓存升级

spring加载bean流程解析 - Yrion - 博客园

【Spring源码分析】Bean加载流程概览 - 五月的仓颉 - 博客园



3.Spring 的启动过程

其启动过程主要包含三个类,ContextLoaderListener,ContextLoader和XmlWebApplicationContex

创建WebApplicationContext。

加载对应的spring配置文件中的Bean。

将WebApplicationContext放入ServletContext(Java Web的全局变量)中。

Spring的启动流程 -

Spring启动过程(面试总结版~)_hjukyjhg56的博客-CSDN博客_spring启动过程


4.controller的线程安全问题

在@Controller/@Service等容器中,默认scope值是单例-singleton的,也是线程不安全的。

@Controller/@Service等容器中尽量不要在定义静态变量,不论是单例(singleton)还是多实例(prototype)他都是线程不安全的。

默认注入的Bean对象,在不设置scope时是线程不安全的。

一定要定义变量的话,用ThreadLocal来封装,这个是线程安全的

怎么理解Spring MVC Controller线程安全性问题_弗兰-随风小欢的博客-CSDN博客_controller线程安全

关于Spring的@Controller @Service等的线程安全问题_u012843361的博客-CSDN博客_controller线程安全问题


5.Transactional

是声明式事务管理编程中使用的注解

MYSQL: 默认为REPEATABLE_READ级别(可重复读(会出现幻读))

1.只能被应用到public方法上

2.在具体的类(或类的方法)上使用 @Transactional 注解,而不要使用在类所要实现的任何接口上,注解不可继承,在接口注解需要开启接口的代理

3.只读接口不要使用,影响性能

4.默认配置下,spring 只有在抛出的异常为运行时 unchecked 异常时才回滚该事务

@Transactional 详解_愿我如星君如月 ... 夜夜流光相皎洁 ...-CSDN博客_@transactional

@Transactional详解_你就像甜甜的益达-CSDN博客_transactional

事务管理机制

TransactionDefinition、PlatformTransactionManager 和 TransactionStatus

编程式事务管理:

声明式事务管理:

Spring 事务管理机制概述_Rico's Blogs-CSDN博客_spring事务管理

@Transactional 详解_愿我如星君如月 ... 夜夜流光相皎洁 ...-CSDN博客_@transactional



5 mybatis批量插入的实现

1.在接口文件中的方法参数中,要用@Param注解,否则容易报异常

2. ,该标签中的 collection 属性值 是接口中参数名称,如接口中的方法的参数名是list,那么collection属性的值就只能取值list,如果mapper接口的方法中参数名叫userList,那这里collection的取值就是userList,其他标签中的其他属性值通常就使用例子中这样的

springboot整合mybatis,批量插入数据_zhucheng325的博客-CSDN博客

大数据量插入主要耗时在session的频繁开启。因此一起开启,集中提交会大幅提升数据插入速度

MySQL数据库批量插入(Spring Boot+Mybatis)_wilson_m的博客-CSDN博客


6.AOP 动态代理

applicationContext中配置实现动态代理

1.一个是被代理对象需要实现JDK提供的动态代理接口;

2.通过CGLIB的jar包实现动态代理,该方法只需要对目标对象继承即可

https://baijiahao.baidu.com/s?id=1598982978229870867&wfr=spider&for=pc

JDK动态代理需要目标对象实现接口,而 CGLIB的动态代理则不需要

spring5——Aop的实现原理(动态代理) - 你是风儿 - 博客园

你可能感兴趣的:(spring材料整理)