- 博客(14)
- 收藏
- 关注
原创 Spring自动注册-Bean的加载
我们以AB循环依赖为例,类A中含有属性类B,而类B中又会含有属性类A,那么初始化beanA的过程:当调用getBean(A)的时候,并不是直接去实例化A,而是先去检测缓存中是否有已经创建好的bean,或者是否已经存在创建好的ObjectFactory,而此时对于A的ObjectFactory我们早已经创建,所以便不会再去向后执行,而是直接调用ObjectFactory#getObject()方法去创建A。,即:创建出来的单例实例对象就会被缓存到。中加载,如果还是加载不到,则再尝试从。的情况,所以为了避免。
2024-08-21 23:11:30
386
原创 Spring自动注册-自定义标签解析
① 获得namespaceUri,此处是通过org.w3c.dom.Node中的getNamespaceURI()方法进行获取的② 获得解析该自定义标签的NamespaceHandler实现类。③ 调用该实现类的parse(...)方法进行解析操作。
2024-08-13 23:10:15
309
原创 Spring自动注册-<bean>标签和属性解析
id: bean的唯一标识,不能包含特殊字符class: bean类的完全路径name: bean的名字,基本不用,和id功能一样,可以包含特殊字符abstract: 声明bean为抽象bean,bean就不会被实例化,作用和parent属性搭配使用autowire: 自动装配模式,有5种:no、byName、byType、constructor、default.
2024-08-12 23:53:23
957
1
原创 Spring 自动注册Bean(xml配置文件解析)
然后将Resource封装为Document实例对象.针对不同标签进行解析(<bean>/<beans>/<import>/<alias>)注册BeanDefinition。将Resource转为为输入流资源InputResource.是整个bean加载的核心部分,它是Spring注册及加载bean的默认实现。,不同的地方是在XmlBeanFactory中使用了自定义的XML读取器。会根据nameSpace判断是进行默认标签解析还是自定义标签解析。将配置文件转换为Resource资源实例。
2024-08-06 23:46:24
519
原创 Spring-Boot概述
并且,当我们需要修改某些配置的时候,也不需要直接在项目源码上进行修改了,可以通过外部化配置,就可以将修改生效。SpringBoot是整合Spring生态圈技术栈的一站式框架,是简化Spring技术栈的快速开发脚手架,缺点是SpringBoot迭代快,变化快,且封装很深,内部原理复杂,不容易精通。中获取到文件中需要自动配置的类,以全类名反射的创建方式,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;表明这个类是SpringBoot的主配置类(启动类)
2024-07-31 00:03:22
679
原创 并发与多线程(三) 并发容器和线程池
我们平时最常用的HashMap其实不是线程安全的,多线程使用场景下,即想线程安全,又想拥有Map的能力,我们可以选择 HashTable ,因为它是针对我们常用的方法上面加上了 synchronized 锁,但是在高并发的场景下,效率低是它的弊端。那么,当执行读操作的时候,对数据是没有修改的,所以,无须对数据进行加锁操作。● 首先,当有任务要执行的时候,会计算线程池中存在的线程数量与核心线程数量(corePoolSize)进行比较,如果小于,则在线程池中创建线程,否则,进行下一步判断。
2024-07-26 00:00:35
691
原创 并发与多线程(二) ReentrantLock/ReadWriteLock/CountDownLatch/CyclicBarrier
包含了JAVA中并发和多线程相关的核心类.
2024-07-23 23:22:18
639
原创 JVM基础
我们平常开发编写的java语言代码都是是需要JVM虚拟机来进行编译,解析,运行的.JVM会把我们的java源码编译成Class字节码文件,然后就可以在安装了JVM的不同操作平台去运行,也就是java语言”一次编译,到处运行”的跨平台性,这是因为JVM虚拟机屏蔽了与操作平台相关的信息,为程序运行构建了相同的运行环境. JVM在运行时涉及到的存储区域称为运行时数据区,主要包括: 堆(heap)、方法区、程序计数器(pc寄存器)、虚拟机栈(JVM Stacks)、本地方法栈. 其中堆
2024-06-07 01:07:12
1997
原创 MyBatis原理
后两者其实都是基于JDBC的封装后的ORM框架,国内基本以为主流。ORM允许开发人员使用面向对象的方式来操作数据库,可以不需要直接编写SQL查询语句。① 注册驱动和数据库信息② 获得Connection,并使用它打开Statement对象③ 通过Statement对象执行SQL语句,并获得结果对象ResultSet④ 通过代码将ResultSet对象转化为POJOJO对象⑤ 关闭数据库资源。
2024-05-29 23:35:27
1475
原创 MySQL基础原理
而提供了事务处理、回滚、崩溃修复能力和多版本并发控制等事务安全性很高的功能,成为目前主要使用的一种存储引擎, 也是mysql的默认存储引擎,底层采用数据结构.
2024-05-22 22:44:51
880
1
原创 Java容器-ArrayList、LinkedList、HashMap
它将键值对存储在一个数组中,数组中每个元素都是一个链表的头节点。但它的增加删除在某些场景下可能比较慢,比如在集合的头部新增或删除一个元素,那么所有旧的元素的位置都会发生变化,如果加上扩容导致数据拷贝,而数据量较多,那么效率会很低.的一个实现类,它的增删效率比较高,因为它是节点存储,双向链表实现,每个节点都记录了上一个节点和下一个节点的地址,针对于增加或修改只需要修改前后节点就可以,所以效率比较高. 对于查询在某些场景下效率会比较差,比如恰好要查询最后一个元素,那么就需要从头遍历到最后才能找到。
2024-05-06 22:40:28
731
原创 Java之反射&泛型
Java的反射机制是指代码(程序)在运行状态中,对于任意一个类,都能够知道并获得这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取类的信息以及动态调用对象的方法的功能称为java的反射机制。要想动态获取一个类的信息,必须先要获取到该类的字节码文件(Class)对象。如图是类的正常加载过程:反射的关键就在于编译加载后的Class文件泛型主要是为了让开发人员在开发时可以在某个场景中定义使用统一的某种类型, 使代码更规范更安全.
2024-04-29 23:35:34
459
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人