The All-in-One Note (16)

由于指令重排的存在,可能出现132的顺序,多线程环境下,可能出现 instance != null 但是初始化工作还没完成的情况在占有锁的线程没有完成初始化时,另一个线程认为以及初始化完毕了去使用对象的时候便会有问题

加上 volatile 关键字就可以解决指令重排的问题

JVM内存泄漏情景

类似于栈,内存的管理权不属于JVM而属于栈本身,所有被pop掉的index上还存在着过期的引用Stack.pop()的源码中手动清除了过期引用
elementData[elementCount] = null; /* to let gc do its work

将对象引用放入了缓存,可以用WeakHashMap作为引用外键

监听器和其他回调,可以用WeakHashMap作为引用外键

JavaEE Spring 什么是IoC和DI

IoC(控制反转),控制反转是把传统上由程序代码直接操控的对象的调用权交给IoC容器,通过IoC容器来实现对象组件的依赖注入,依赖检查,自动装配等对象生命周期管理

DI(依赖注入)主要是遵循设计模式中依赖倒转原则中的“高层模块不应该依赖底层模块,两个都应该抽象依赖”,依赖注入的方式主要包括,setter方法,interface接口,constructor构造函数,annotation注解

Spring Ioc容器

BeanFactory和ApplicationContext

BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器,ApplicationContext是BeanFactory的子接口

BeanFactory

是Spring里面最底层的接口,包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系

BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化

ApplicationContext

ApplicationContext接口作为BeanFactory的派生,除了提供BeanFactory所具有的功能外,还提供了更完整的框架功能

继承MessageSource,因此支持国际化。

统一的资源文件访问方式。

提供在监听器中注册bean的事件。

同时加载多个配置文件。

载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层。

在容器启动时,一次性创建了所有的Bean

Bean的五种作用域

singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例

prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyysp.html