Java核心知识点整理大全12-笔记

Java核心知识点整理大全-笔记_希斯奎的博客-CSDN博客

Java核心知识点整理大全2-笔记_希斯奎的博客-CSDN博客

Java核心知识点整理大全3-笔记_希斯奎的博客-CSDN博客

Java核心知识点整理大全4-笔记-CSDN博客

Java核心知识点整理大全5-笔记-CSDN博客

Java核心知识点整理大全6-笔记-CSDN博客

Java核心知识点整理大全7-笔记-CSDN博客

Java核心知识点整理大全8-笔记-CSDN博客

Java核心知识点整理大全9-笔记-CSDN博客

Java核心知识点整理大全10-笔记-CSDN博客

Java核心知识点整理大全11-笔记-CSDN博客

往期快速传送门👆:

目录

5.1.6. JAVA 序列化(创建可复用的 Java 对象)

保存(持久化)对象及其状态到内存或者磁盘

序列化对象以字节数组保持-静态成员不保存

序列化用户远程对象传输

Serializable 实现序列化

5.1.7. JAVA 复制

5.1.7.1. 直接赋值复制

5.1.7.2. 浅复制(复制引用但不复制引用的对象)

5.1.7.3. 深复制(复制对象和其应用对象)

5.1.7.4. 序列化(深 clone 一中实现)

6. Spring 原理

6.1.1. Spring 特点

6.1.1.1. 轻量级

6.1.1.2. 控制反转

6.1.1.3. 面向切面

6.1.1.4. 容器

6.1.1.5. 框架集合

6.1.2. Spring 核心组件

6.1.3. Spring 常用模块:

6.1.4. Spring 主要包

 6.1.7. Spring IOC 原理

6.1.7.1. 概念

6.1.7.2. Spring 容器高层视图

6.1.7.3. IOC 容器实现

1.1..1.1.1 BeanDefinitionRegistry 注册表

1.1..1.1.2 BeanFactory 顶层接口

1.1..1.1.3 ListableBeanFactory

1.1..1.1.4 HierarchicalBeanFactory 父子级联

1.1..1.1.5 ConfigurableBeanFactory

1.1..1.1.6 AutowireCapableBeanFactory 自动装配

1.1..1.1.7 SingletonBeanRegistry 运行期间注册单例 Bean

1.1..1.1.8 依赖日志框框

WebApplication 体系架构

6.1.7.4. Spring Bean 作用域

singleton:单例模式(多线程下不安全)

prototype:原型模式每次使用时创建

Request:一次 request 一个实例


5.1.6. JAVA 序列化(创建可复用的 Java 对象)

保存(持久化)对象及其状态到内存或者磁盘

Java 平台允许我们在内存中创建可复用的 Java 对象,但一般情况下,只有当 JVM 处于运行时, 这些对象才可能存在,即,这些对象的生命周期不会比 JVM 的生命周期更长。但在现实应用中, 就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。 Java 对象序列化就能够帮助我们实现该功能。

序列化对象以字节数组保持-静态成员不保存

使用 Java 对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装 成对象。必须注意地是,对象序列化保存的是对象的”状态”,即它的成员变量。由此可知,对 象序列化不会关注类中的静态变量。

序列化用户远程对象传输

除了在持久化对象时会用到对象序列化之外,当使用 RMI(远程方法调用),或在网络中传递对象时, 都会用到对象序列化。Java序列化API为处理对象序列化提供了一个标准机制,该API简单易用。

Serializable 实现序列化

在 Java 中,只要一个类实现了 java.io.Serializable 接口,那么它就可以被序列化。

ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化

通过 ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化。 writeObject 和 readObject 自定义序列化策略 在类中增加 writeObject 和 readObject 方法可以实现自定义序列化策略。 序列化 ID 虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个

类的序列化 ID

是否一致(就是 private static final long serialVersionUID)

序列化并不保存静态变量

序列化子父类说明

要想将父类对象也序列化,就需要让父类也实现 Serializable 接口。

Transient 关键字阻止该变量被序列化到文件中

1. 在变量声明前加上 Transient 关键字,可以阻止该变量被序列化到文件中,在被反序列 化后,transient 变量的值被设为初始值,如 int 型的是 0,对象型的是 null。

2. 服务器端给客户端发送序列化对象数据,对象中有一些数据是敏感的,比如密码字符串 等,希望对该密码字段在序列化时,进行加密,而客户端如果拥有解密的密钥,只有在 客户端进行反序列化时,才可以对密码进行读取,这样可以一定程度保证序列化对象的 数据安全。

5.1.7. JAVA 复制

将一个对象的引用复制给另外一个对象,一共有三种方式。第一种方式是直接赋值,第二种方式 是浅拷贝,第三种是深拷贝。所以大家知道了哈,这三种概念实际上都是为了拷贝对象。

5.1.7.1. 直接赋值复制

直接赋值。在 Java 中,A a1 = a2,我们需要理解的是这实际上复制的是引用,也就是 说 a1 和 a2 指向的是同一个对象。因此,当 a1 变化的时候,a2 里面的成员变量也会跟 着变化。

5.1.7.2. 浅复制(复制引用但不复制引用的对象)

创建一个新对象,然后将当前对象的非静态字段复制到该新对象,如果字段是值类型的, 那么对该字段执行复制;如果该字段是引用类型的话,则复制引用但不复制引用的对象。 因此,原始对象及其副本引用同一个对象。

class Resume implements Cloneable{public Object clone() {try {return (Resume)super.clone();} catch (Exception e) {e.printStackTrace();return null;}}
} 

5.1.7.3. 深复制(复制对象和其应用对象)

深拷贝不仅复制对象本身,而且复制对象包含的引用指向的所有对象。

class Student implements Cloneable {String name;int age;Professor p;Student(String name, int age, Professor p) {this.name = name;this.age = age;this.p = p;}public Object clone() {Student o = null;try {o = (Student) super.clone();} catch (CloneNotSupportedException e) {System.out.println(e.toString());}o.p = (Professor) p.clone();return o;}
}

5.1.7.4. 序列化(深 clone 一中实现)

在 Java 语言里深复制一个对象,常常可以先使对象实现 Serializable 接口,然后把对 象(实际上只是对象的一个拷贝)写到一个流里,再从流里读出来,便可以重建对象。

6. Spring 原理

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合

6.1.1. Spring 特点

6.1.1.1. 轻量级

6.1.1.2. 控制反转

6.1.1.3. 面向切面

6.1.1.4. 容器

6.1.1.5. 框架集合


6.1.2. Spring 核心组件

6.1.3. Spring 常用模块:

6.1.4. Spring 主要包

  1. 核心容器四个包
    1. spring-beans-4.1.3.RELEASE.jar
    2. spring-context-4.1.3.RELEASE.jar
    3. spring-core-4.1.3.RELEASE.jar
    4. spring-expression-4.1.3.RELEASE.jar

 6.1.7. Spring IOC 原理

6.1.7.1. 概念

Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化 Bean 并建立 Bean 之间的依赖关系。 Spring 的 IoC 容器在完成这些底层工作的基础上,还提供 了 Bean 实例缓存、生命周期管理、 Bean 实例代理、事件发布、资源装载等高级服务。

6.1.7.2. Spring 容器高层视图

Spring 启动时读取应用程序提供的 Bean 配置信息,并在 Spring 容器中生成一份相应的 Bean 配 置注册表,然后根据这张注册表实例化 Bean,装配好 Bean 之间的依赖关系,为上层应用提供准 备就绪的运行环境。其中 Bean 缓存池为 HashMap 实现


6.1.7.3. IOC 容器实现

BeanFactory-框架基础设施 BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身;ApplicationContext 面向使用 Spring 框架的开发者,几乎所有的应用场合我们都直接使用 ApplicationContext 而非底层 的 BeanFactory。


1.1..1.1.1 BeanDefinitionRegistry 注册表

1. Spring 配置文件中每一个节点元素在 Spring 容器里都通过一个 BeanDefinition 对象表示, 它描述了 Bean 的配置信息。而 BeanDefinitionRegistry 接口提供了向容器手工注册 BeanDefinition 对象的方法。

1.1..1.1.2 BeanFactory 顶层接口

2. 位于类结构树的顶端 ,它最主要的方法就是 getBean(String beanName),该方法从容器中 返回特定名称的 Bean,BeanFactory 的功能通过其他的接口得到不断扩展:

1.1..1.1.3 ListableBeanFactory

3. 该接口定义了访问容器中 Bean 基本信息的若干方法,如查看 Bean 的个数、获取某一类型 Bean 的配置名、查看容器中是否包括某一 Bean 等方法;

1.1..1.1.4 HierarchicalBeanFactory 父子级联

4. 父子级联 IoC 容器的接口,子容器可以通过接口方法访问父容器; 通过 HierarchicalBeanFactory 接口, Spring 的 IoC 容器可以建立父子层级关联的容器体系,子 容器可以访问父容器中的 Bean,但父容器不能访问子容器的 Bean。Spring 使用父子容器实 现了很多功能,比如在 Spring MVC 中,展现层 Bean 位于一个子容器中,而业务层和持久 层的 Bean 位于父容器中。这样,展现层 Bean 就可以引用业务层和持久层的 Bean,而业务 层和持久层的 Bean 则看不到展现层的 Bean。

1.1..1.1.5 ConfigurableBeanFactory

5. 是一个重要的接口,增强了 IoC 容器的可定制性,它定义了设置类装载器、属性编辑器、容 器初始化后置处理器等方法;

1.1..1.1.6 AutowireCapableBeanFactory 自动装配

6. 定义了将容器中的 Bean 按某种规则(如按名字匹配、按类型匹配等)进行自动装配的方法;

1.1..1.1.7 SingletonBeanRegistry 运行期间注册单例 Bean

7. 定义了允许在运行期间向容器注册单实例 Bean 的方法;对于单实例( singleton)的 Bean 来说,BeanFactory 会缓存 Bean 实例,所以第二次使用 getBean() 获取 Bean 时将直接从 IoC 容器的缓存中获取 Bean 实例。Spring 在 DefaultSingletonBeanRegistry 类中提供了一 个用于缓存单实例 Bean 的缓存器,它是一个用 HashMap 实现的缓存器,单实例的 Bean 以 beanName 为键保存在这个 HashMap 中。

1.1..1.1.8 依赖日志框框

8. 在初始化 BeanFactory 时,必须为其提供一种日志框架,比如使用 Log4J, 即在类路径下提 供 Log4J 配置文件,这样启动 Spring 容器才不会报错。

ApplicationContext 面向开发应用 ApplicationContext 由 BeanFactory 派 生 而 来 , 提 供 了 更 多 面 向 实 际 应 用 的 功 能 。 ApplicationContext 继承了 HierarchicalBeanFactory 和 ListableBeanFactory 接口,在此基础 上,还通过多个其他的接口扩展了 BeanFactory 的功能:


1. ClassPathXmlApplicationContext:默认从类路径加载配置文件

2. FileSystemXmlApplicationContext:默认从文件系统中装载配置文件

3. ApplicationEventPublisher:让容器拥有发布应用上下文事件的功能,包括容器启动事 件、关闭事件等。

4. MessageSource:为应用提供 i18n 国际化消息访问的功能;

5. ResourcePatternResolver : 所 有 ApplicationContext 实现类都实现了类似于 PathMatchingResourcePatternResolver 的功能,可以通过带前缀的 Ant 风格的资源文 件路径装载 Spring 的配置文件。

6. LifeCycle:该接口是 Spring 2.0 加入的,该接口提供了 start()和 stop()两个方法,主要 用于控制异步处理过程。在具体使用时,该接口同时被 ApplicationContext 实现及具体 Bean 实现, ApplicationContext 会将 start/stop 的信息传递给容器中所有实现了该接 口的 Bean,以达到管理和控制 JMX、任务调度等目的。

7. ConfigurableApplicationContext 扩展于 ApplicationContext,它新增加了两个主要 的方法: refresh()和 close(),让 ApplicationContext 具有启动、刷新和关闭应用上下 文的能力。在应用上下文关闭的情况下调用 refresh()即可启动应用上下文,在已经启动 的状态下,调用 refresh()则清除缓存并重新装载配置信息,而调用 close()则可关闭应用 上下文。

WebApplication 体系架构

WebApplicationContext 是专门为 Web 应用准备的,它允许从相对于 Web 根目录的 路径中装载配置文件完成初始化工作。从 WebApplicationContext 中可以获得 ServletContext 的引用,整个 Web 应用上下文对象将作为属性放置到 ServletContext 中,以便 Web 应用环境可以访问 Spring 应用上下文。

6.1.7.4. Spring Bean 作用域

Spring 3 中为 Bean 定义了 5 中作用域,分别为 singleton(单例)、prototype(原型)、 request、session 和 global session,5 种作用域说明如下:

singleton:单例模式(多线程下不安全)

1. singleton:单例模式,Spring IoC 容器中只会存在一个共享的 Bean 实例,无论有多少个 Bean 引用它,始终指向同一对象。该模式在多线程下是不安全的。Singleton 作用域是 Spring 中的缺省作用域,也可以显示的将 Bean 定义为 singleton 模式,配置为:

prototype:原型模式每次使用时创建

2. prototype:原型模式,每次通过 Spring 容器获取 prototype 定义的 bean 时,容器都将创建 一个新的 Bean 实例,每个 Bean 实例都有自己的属性和状态,而 singleton 全局只有一个对 象。根据经验,对有状态的bean使用prototype作用域,而对无状态的bean使用singleton 作用域。

Request:一次 request 一个实例

3. request:在一次 Http 请求中,容器会返回该 Bean 的同一实例。而对不同的 Http 请求则会 产生新的 Bean,而且该 bean 仅在当前 Http Request 内有效,当前 Http 请求结束,该 bean 实例也将会被销毁。 session

4. session:在一次 Http Session 中,容器会返回该 Bean 的同一实例。而对不同的 Session 请 求则会创建新的实例,该 bean 实例仅在当前 Session 内有效。同 Http 请求相同,每一次 session 请求创建新的实例,而不同的实例之间不共享属性,且实例仅在自己的 session 请求 内有效,请求结束,则实例将被销毁。 global Session

5. global Session:在一个全局的 Http Session 中,容器会返回该 Bean 的同一个实例,仅在 使用 portlet context 时有效。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/215138.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【多线程】Thread类的使用

目录 1.概述 2.Thread的常见构造方法 3.Thread的几个常见属性 4.启动一个线程-start() 5.中断一个线程 5.1通过共享的标记来进行沟通 5.2 调用 interrupt() 方法来通知 6.等待一个进程 7.获取当前线程引用 8.线程的状态 8.1所有状态 8.2线程状态和转移的意义 1.概述 …

使用向日葵开机棒进行远程开机

文章目录 1\. 前言2\. 说明3\. 开机棒设置4\. 电脑端设置4.1. 电脑端允许网卡唤醒4.1.1. 关闭设备节能4.2. 将电脑端设备加入设备列表 5\. 手机端5.1. 添加开机棒5.2. 绑定主机5.2.1. 添加成功的主机 6\. 唤醒 1. 前言 如果我们出差在外或者人不在实验室,如果可以使…

【极客技术】真假GPT-4?微调 Llama 2 以替代 GPT-3.5/4 已然可行!

近日小编在使用最新版GPT-4-Turbo模型(主要特点是支持128k输入和知识库截止日期是2023年4月)时,发现不同商家提供的模型回复出现不一致的情况,尤其是模型均承认自己知识库达到2023年4月,但当我们细问时,Fak…

【Spring篇】JDK动态代理

目录 什么是代理? 代理模式 动态代理 Java中常用的代理模式 问题来了,如何动态生成代理类? 动态代理底层实现 什么是代理? 顾名思义,代替某个对象去处理一些问题,谓之代理,那么何为动态&a…

Zabbix-Liunx服务器内存使用率测试

要在Python 2.7中运行内存消耗脚本并安装psutil,您需要先安装pip。以下是完整的步骤,包括如何在Python 2.7环境中安装pip,然后安装psutil,以及最后如何运行内存消耗脚本。 步骤1: 安装pip 在Python 2.7中安装pip: 首先…

积分球吸收光谱测量的领域有哪些?

积分球吸收光谱测量是一种常用的吸收光谱测量方法,它通过将样品放置在积分球的入口处,球内的光线经过多次反射后形成均匀的照度分布,然后使用光度计或光谱仪对光线进行测量,可以获得样品的相关参数。 在积分球吸收光谱测量中&…

Python入门03变量

目录 1 什么是变量2 变量声明3 变量命名规则4 变量类型5 类型转换总结 1 什么是变量 编程语言中变量就像容器一样,可以用来存放东西 我的变量就像杯子一样,可以用来盛放各种饮料。在Python中变量用来存放各种各样的数据,比如整数、浮点数、…

NLP的使用

参考: Apache openNLP 简介 - 链滴 (ld246.com) opennlp 模型下载地址:Index of /apache/opennlp/models/ud-models-1.0/ (tencent.com) OpenNLP是一个流行的开源自然语言处理工具包,它提供了一系列的NLP模型和算法。然而,Open…

Linux的基本指令(3)

16.cal指令 cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。 命…

Java特殊文件

Properties 读取数据 package com.itheima.d1;import java.io.FileNotFoundException; import java.io.FileReader; import java.nio.charset.StandardCharsets; import java.util.Properties; import java.util.Set;public class Test1 {public static void main(String[] arg…

语音合成综述Speech Synthesis

一、语音合成概述 语音信号的产生分为两个阶段,信息编码和生理控制。首先在大脑中出现某种想要表达的想法,然后由大脑将其编码为具体的语言文字序列,及语音中可能存在的强调、重读等韵律信息。经过语言的组织,大脑通过控制发音器…

Jmeter脚本录制:抓取IOS手机请求包

现在移动端的项目越来越多,今天给大家介绍一下,在IOS下Jmeter如何抓包。 1、电脑连上wifi 2、Jmeter中配置“HTTP代理服务器” 1)启动Jmeter; 2)“测试计划”中添加“线程组”; 3)“测试计划”中添加“HTTP代理服务器”&…