序号 | 地址 |
---|---|
1 | 计算机网络核心 |
2 | 数据库相关 |
3 | Redis |
4 | Linux相关 |
5 | JVM的内容 |
6 | GC相关的 |
7 | Java多线程与并发 |
8 | Java多线程与并发-原理 |
9 | Java常用类库与技巧 |
10 | Java框架-Spring |
IoC(Inversion of control):控制反转
IOC:是一个思想。
DI举例:
如果,轮子改变的话,整体的都是需要改变的。
正确的注入的方式:
控制反转(IOC):控制反转,由自己的控制,转为容器进行控制管理。
依赖注入,是上层的类,注入底层的类。也就是只有4个类的内存空间。上面的是每次都new对象,开辟了双份的内存空间。
依赖注入的方式:
依赖倒置原则、IOC、DI、IOC容器的关系:
依赖倒置原则:高层模块不能依赖底层模块,应该依赖其抽象。
IOC容器的优势:
Spring提供一个配置文件,描述Bean以及Bean之间的依赖关系,利用Java语言的反射功能实例化Bean,并建立Bean之间的依赖关系。
Spring 功能
Spring IOC支持的功能
Spring IOC容器的核心接口
BeanDefinition()
主要用来描述Bean的定义
将XML和注解里Bean,解析为Spring内部的BeanDefinition
Bean Definition Registry
提供向IOC容器注册 BeanDefinition对象的方法
以Bean为Key,BeanDefinition为value,存在BeanDefinitionMap中。并将名称存在beanDfinitionNames中,以便后续Bean的实例化。
BeanFactory体系结构
BeanFactory和ApplicationContext的比较?
ApplicationContext的功能(继承多个接口)
geBean的实现AbstractBeanFactory方法。
getBean方法的代码逻辑
Spring Bean的5个作用域?
创建和销毁Bean很消耗资源
在Spring框架中,可以通过配置和注解来定义和管理对象的生命周期和作用域。Spring Bean的作用域定义了对象实例的创建和销毁方式以及对象在应用程序中的可见性。下面是Spring Bean的五个作用域:
单例作用域表示在整个应用程序中只创建一个对象实例。当使用singleton作用域时,Spring容器只会创建一个共享的Bean实例,并在需要时返回该实例。每次请求该Bean时都会返回同一个实例。
原型作用域表示每次请求时都会创建一个新的对象实例。每次从容器中获取Bean时,都会返回一个新的独立实例。原型作用域适用于需要每次使用时都获得一个全新实例的场景。
请求作用域表示每个HTTP请求都会创建一个新的对象实例。在Web应用程序中,每个HTTP请求都会创建一个独立的Bean实例,并且该实例在整个请求范围内是共享的。适用于每个HTTP请求需要使用不同实例的场景。
会话作用域表示每个用户会话都会创建一个新的对象实例。在Web应用程序中,每个用户会话都会创建一个独立的Bean实例,并且该实例在整个会话期间是共享的。适用于需要跨多个请求共享状态的场景。
全局会话作用域是在基于Portlet的Web应用程序中使用的作用域,它表示整个应用程序的生命周期。在非Portlet环境中,全局会话作用域与标准会话作用域相同。
以上是Spring框架中常用的五个Bean作用域。通过选择适当的作用域,可以控制对象的生命周期和共享方式,以满足应用程序的需求。
Spring Bean的声明周期
创建过程:
销毁过程:
关注点分离:不同的问题交给不同的部分去解决
AOP的三种织入方式
AOP的主要名词概念:
Advice的种类
AOP的实现:JakProxy和 Cglib
JDKProxy:通过ava的内部反射机制实现
Cgib:借助ASM实现
反射机制在生成类的过程中比较高效
ASM在生成类之后的执行过程中比较高效
代理模式:
接口+真实实现类+代理类(生成一个代理类,代理真实的类,对外提供服务)
Spring里的代理模式的实现
数据库事务正确执行的4个基础要素是:原子性(Atomicity),一致性(Consistency),隔离性(Isolation)和持久性(Durability)
原子性(Atomicity): 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency): 事务前后数据的完整性必须保持一致。
隔离性(Isolation): 事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。
持久性(Durability): 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
并发访问问题:
脏读:一个事务读到了另一个事务未提交的数据.
不可重复读:个事务读到了另一个事务已经提交(update)的数据。引发另一个事务,在事务中的多次查询结果不一致。
虚读/幻读:一个事务读到了另一个事务已经提交(insert)的数据。导致另一个事务,在事务中多次查询的结果不一致。
隔离级别:解决问题
读未提交(read uncommitted):最低的隔离级别,含义是允许一个事务去读取另一个事务未提交的数据。
读已提交(read committed):是说一个事务只能读取另一个事务已经提交的数据。
可重复读(repeatable read):针对数据库中同一条记录而言,使得同一条数据库记录的读写按照一个序列化进行操作,不会产生交叉情况,这样就能保证同一条数据的一致性。
串行化(serializable):一种让SQL按照顺序读写的方式,能够消除数据库事务之间并发产生数据不一致的问题。
@Transactional(propagation=Propagation.REQIRED)
public class FlowService{
}