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.
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的实现原理(动态代理) - 你是风儿 - 博客园