自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (1)
  • 收藏
  • 关注

原创 如何学习MyBatis 源码

Mapper:分析 Mapper 接口如何与 SQL 语句关联,以及 MyBatis 是如何动态代理 Mapper 接口的。Configuration:深入理解 Configuration 类的内部结构和作用,包括属性的加载、映射器的注册等。SqlSession:SqlSession 是 MyBatis 操作数据库的会话,了解它的生命周期和操作方法。事务管理:MyBatis 提供了对事务的支持,了解其事务管理的实现方式。设置和属性:分析 MyBatis 的全局设置和属性如何影响框架的行为。

2024-07-01 19:06:21 487

原创 快速掌握MyBatis

MyBatis 是一个流行的 Java 持久层框架,它提供了一种半自动的 SQL 映射方式,使得开发者能够更加灵活地编写 SQL 语句,同时避免了传统 JDBC 代码的冗余和复杂性。settings:包含 MyBatis 的内部设置,影响 MyBatis 的行为,如 mapUnderscoreToCamelCase 用于自动处理数据库字段和 Java 属性之间的下划线和驼峰命名转换。MyBatis:介于 JDBC 和 Hibernate 之间,提供了 SQL 映射和对象关系映射的灵活性,同时减少了代码量。

2024-07-01 19:01:25 459

原创 设计模式对比及应用场景

每种设计模式都有其特定的使用场景和特点,合理选择和应用设计模式可以提高代码的可读性、可维护性和灵活性。特点:定义对象间的一对多依赖关系,当对象状态改变时,所有依赖它的对象都会得到通知。应用场景:需要固定算法骨架,同时允许子类定制某些步骤,如JdbcTemplate。System.out.println("执行SQL: " + sql);应用场景:算法动态切换,如排序算法、优惠促销策略等。特点:定义一系列可互换的算法,可动态更改对象的行为。特点:在方法中定义算法骨架,延迟一些步骤的实现。

2024-07-01 18:53:31 876

原创 设计模式——行为型模式

行为型模式主要关注对象间的通信,它们提供了一种方法来定义对象之间的相互作用,以及怎样分配责任。观察者模式定义了对象之间的一对多依赖关系,当一个对象状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。System.out.println(“收到消息:” + message);System.out.println(“观察者被通知”);System.out.println(“执行操作”);System.out.println(“算法A”);System.out.println(“算法B”);

2024-07-01 18:48:28 711

原创 设计模式——结构型模式(适配器、装饰器及代理模式 外观、桥接、组合及享元模式)

System.out.println(“适配者类的特殊方法被调用”);组合模式允许将对象组合成树形结构,以表示“部分-整体”的层次结构。System.out.println(“具体实现A的操作”);System.out.println(“具体构件的方法”);System.out.println(“真实主题的请求”);System.out.println(“子系统A的操作”);System.out.println(“子系统B的操作”);System.out.println(“叶节点的操作”);

2024-07-01 18:39:18 1027

原创 设计模式-创建型模式 (工厂方法、抽象工厂及单例模式 建造者与原型模式)

建造者模式用于创建一个复杂的对象,同时允许用户只通过指定复杂对象的类型和内容就能构建它们,隐藏了内部的构建细节。工厂方法模式定义了一个创建对象的接口,让子类决定实例化哪一个类。每种模式都有其特定的使用场景,选择正确的模式可以提高代码的可读性、可维护性和灵活性。System.out.println(“使用ConcreteProductA”);抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。原型模式使用已有实例指定创建对象的种类,并通过复制这些实例来创建新的对象。

2024-07-01 18:35:01 597

原创 设计模式——迪米特法则

如果我们让Person类直接访问City的name属性,就像注释掉的getCityName()方法那样,就违反了迪米特法则,因为Person类不应该关心City类内部是如何实现的。根据迪米特法则,Person类应该直接访问它的Address属性,但是不应该访问City属性的属性或方法,除非City是作为参数传入的。遵循迪米特法则可以帮助我们创建松耦合的代码,使得每个类都只关注自己的职责,而不是其他类的内部实现细节。迪米特法则的目的是减少类之间的耦合,使得单元测试更加容易,并且提高代码的可维护性。

2024-07-01 18:31:40 291

原创 设计模式——依赖倒置、接口隔离、合成复用原则

依赖倒置原则指出高层模块不应依赖于低层模块,二者都应该依赖于抽象(接口或抽象类)。抽象不应依赖于细节,细节应依赖于抽象。接口隔离原则主张不应该强迫客户依赖于它们不使用的方法。一个类对一个接口的依赖应该尽可能少。// 组合基本功能和增强功能。合成复用原则提倡优先使用对象的组合,而不是通过继承来复用代码。// 现在我们可以根据不同的需求实现不同的接口。

2024-07-01 18:30:01 1083

原创 设计模式——开闭、单一职责及里氏替换原则

在这些示例中,我们遵循了单一职责原则,为不同的功能创建了不同的类;遵循了里氏替换原则,确保子类可以替换其基类,而不影响程序的正确性。开闭原则由Bertrand Meyer提出,强调软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。它指出,子类对象必须能够替换其基类对象,而不影响程序的正确性。这意味着子类应该能够扩展基类的功能,而不是改变基类的行为。单一职责原则由Robert C. Martin提出,主张一个类应该只有一个引起它变化的原因。这有助于减少类之间的耦合,提高代码的可维护性。

2024-07-01 18:27:44 976

原创 掌握Spring AOP 编程概念

*切面(Aspect):**切面是行动(Advice)、切点(Pointcut)、连接点(Joinpoint)、引入(Introduction)和异常处理(Exception handling)的集合。**连接点(Joinpoint):**在程序执行过程中的特定点,如方法的调用或异常的处理。**切点(Pointcut):**它定义了一组连接点,这些连接点将被拦截以应用通知(Advice)。**环绕通知(Around):**包围目标方法的执行,可以在方法执行前后添加逻辑。它是在切点处执行的代码。

2024-06-26 18:19:47 267

原创 6.Factorybean与Beanfactory区别

FactoryBean 需要自定义实现,您需要编写一个类实现 FactoryBean 接口,并重写 getObject 方法来定义Bean的创建逻辑。BeanFactory 负责创建Bean对象,是Spring中最基本的工厂,用于提供和管理所有的Bean。FactoryBean 是一个特殊的Bean,充当其他Bean的工厂,用于自定义Bean的创建过程。FactoryBean 是一个Bean,它的实例本身是一个工厂,负责创建其他Bean的实例。

2024-06-26 17:56:59 324

原创 5.Spring IOC 循环依赖问题源码深度剖析

如果尝试获取的Bean正在创建中(即在singletonObjects中不存在,但在earlySingletonObjects中存在),容器会尝试从singletonFactories获取早期引用,并将其放入earlySingletonObjects中,然后继续Bean的创建过程。这可能是直接的,比如Bean A依赖Bean B,Bean B又依赖Bean A;或者是间接的,比如Bean A依赖Bean B,Bean B依赖Bean C,Bean C又依赖Bean A。4. 解决循环依赖的关键。

2024-06-26 17:53:26 489

原创 BeanFactoryPostProcessor源码分析

BeanFactoryPostProcessor可以在Bean初始化之前对BeanFactory进行修改,而BeanPostProcessor可以在Bean的初始化过程中插入自定义逻辑。调用postProcessBeanFactory: 在BeanFactory的标准初始化之后,容器会调用所有注册的BeanFactoryPostProcessor的postProcessBeanFactory方法。调用时机: BeanFactoryPostProcessor的调用发生在Bean的属性赋值之后,初始化之前。

2024-06-26 17:37:36 419

原创 4.Spring Context 装载过程源码分析

这通常通过调用ClassPathXmlApplicationContext、FileSystemXmlApplicationContext或AnnotationConfigApplicationContext等具体实现类的构造函数来完成。根据ApplicationContext的具体实现,它会从不同的源装载Bean定义。在ApplicationContext的实现类中,装载过程首先会初始化一个DefaultListableBeanFactory实例,这是BeanFactory的一个具体实现。

2024-06-26 17:35:46 621

原创 销毁DisposableBean/@PreDestroy

通常情况下,推荐使用@PreDestroy注解,因为它提供了更好的灵活性,并且与Spring框架无关,可以在其他支持JSR-250规范的容器中使用。销毁顺序:在Spring中,实现了DisposableBean接口的destroy()方法和使用@PreDestroy注解的方法都会在Bean销毁时被调用,但具体顺序取决于Spring容器的管理方式和其他Bean销毁逻辑的配置。@PreDestroy是一个注解,它标记在Bean的某个方法上,表示这个方法应该在Bean销毁之前被调用。// 其他属性和方法。

2024-06-26 17:32:41 385

原创 Bean的后置处理器BeanPostProcessor源码分析

调用postProcessBeforeInitialization: 在Bean的初始化方法afterPropertiesSet或自定义的初始化方法执行之前,容器会遍历所有的BeanPostProcessor,并调用它们的postProcessBeforeInitialization方法。应用顺序: BeanPostProcessor的实现类可以定义它们的应用顺序。注册BeanPostProcessor: 在容器初始化时,所有的BeanPostProcessor实现类都会被注册到容器中。

2024-06-26 17:30:14 316

原创 初始化InitializingBean/@PostConstruct

顺序:在Spring中,实现了InitializingBean接口的afterPropertiesSet()方法和使用@PostConstruct注解的方法都会在Bean的属性设置之后被调用,但@PostConstruct注解的方法可能会在afterPropertiesSet()之前调用,具体顺序取决于Bean的创建顺序。@PostConstruct是一个注解,它标记在Bean的某个方法上,表示这个方法应该在Bean的属性设置完成之后,依赖注入完成之后,但在Bean准备使用之前被调用。

2024-06-26 17:28:05 468

原创 3.sping掌握Bean生命周期

了解Bean的生命周期对于开发者来说非常重要,因为它允许开发者在Bean的不同阶段插入自定义逻辑,例如在Bean初始化前后执行特定的操作,或者在Bean销毁前清理资源。通过实现特定的接口或配置特定的方法,开发者可以控制Bean的创建和销毁过程。如果Bean实现了BeanNameAware接口,Spring将调用setBeanName()方法,传入Bean的ID。在Bean实例化之后,Spring容器会注入Bean的属性,这些属性可能是通过XML配置、注解或Java配置指定的。

2024-06-26 17:23:13 705

原创 2.理解Spring IOC 容器设计原理

Spring IoC容器提供了多个扩展点,如BeanPostProcessor、BeanFactoryPostProcessor等,允许开发者在容器的运行过程中插入自定义逻辑。Spring IoC容器的实现通常使用模板方法模式,定义了一系列的模板方法,子类可以重写这些方法来实现特定的行为。Spring定义了Bean的生命周期,包括实例化、属性赋值、初始化前回调、初始化后回调、销毁前回调和销毁。容器:Spring IoC容器是一个对象工厂,它负责创建对象、管理对象的生命周期、维护对象间的关系。

2024-06-26 16:58:28 820

原创 1.整体认知spring 体系结构

Spring框架的诞生是为了简化Java EE的开发,它提供了一种统一和高效的方式来构建整个应用程序,并且可以将各种单层框架以最佳的方式组合在一起,形成一个连贯的体系。这是Spring框架的基础,提供了IoC容器的功能,允许组件间的依赖关系由Spring来管理,而不是在代码中硬编码。核心容器由spring-core和spring-beans模块组成,还包括了spring-context模块,它建立在核心容器之上,提供框架的集成服务。提供了对不同环境的适配,如Spring对JMX、各种消息传递协议等的支持。

2024-06-26 16:55:45 249

原创 mabatis

mabatis 只有接口没有实现,为什么能调到数据库?

2024-06-16 23:06:34 511

原创 java并发

此外,由于Java的版本更新,新的特性和优化可能会不断加入,因此建议保持对Java最新版本的关注。Java并发包位于java.util.concurrent包中,它包含了许多用于多线程编程的类和接口,为开发人员提供了一套强大的工具来编写高效且可维护的多线程应用程序。虽然Java并发包提供了许多线程安全的集合类,但Java的java.util包中也包含了一些同步容器类,如Vector和Hashtable,这些类在方法层面实现了同步,因此是线程安全的,但通常性能不如并发包中的集合类。

2024-06-16 23:02:48 186

原创 java注解之Transactional

如果一个带有 @Transactional 注解的方法内部调用了同一个类中的其他方法(即使是另一个带有 @Transactional 注解的方法),Spring 的事务代理不会拦截内部调用,因此内部调用的方法将不会运行在事务上下文中。如果使用 @Transactional 注解的方法是非public的(例如private、protected或默认修饰符),Spring 的事务代理不会拦截对这些方法的调用,因此事务管理不会生效。深入理解事务的传播行为,并根据需要设置正确的传播行为。

2024-06-16 22:55:31 498

原创 Springboot&&Spring

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考。

2024-06-16 22:51:06 1309

原创 费曼学习五部曲

选择自己想要掌握的只是和技能,并且要真正地理解学习它的必要性,在这个前提下产生专注力。专注是一切成功学的基础。对我们要学习的知识、概念等进行归类、解构和对比,系统地理解 这些内容,存优去劣,将我们需要的知识筛选出来,选择合适的方式进行学习。在一个需要向别人传授的场景中“以教代学”,向那些不熟悉该知识的人阐述你的见解,向他们解释这些知识,用他们能理解的方式及最简单的语言做到这一点。通过回顾和反思,从输出的过程中发现自己不能理解的地方,或者无法简单解释之处,记录下来,回到第二步,查看资料来源,弥补.

2024-06-14 15:23:16 235

原创 搜索引擎Lucene(Solr和Elasticsearch)2

在Lucene图书馆的深处,有一个被称为“索引大厅”的神秘场所。每当一本新书到来,馆长就会使用他的魔法杖轻触书本,念出古老的咒语,将书中的知识和智慧转化为数字信号,存储在图书馆的索引水晶中。而图书馆的馆长和助手们,继续在知识的海洋中航行,不断地学习和成长,确保这座神奇的图书馆永远照亮着求知者的道路。***多语言支持:***图书馆的魔法能够理解世界上所有的语言,无论访客使用何种语言提问,都能得到满意的答案。缓存机制:图书馆的某些热门书籍和知识会被存储在特殊的“记忆水晶”中,以便快速访问,无需每次都重新索引。

2024-06-14 15:21:07 1043

原创 搜索引擎Lucene(Solr和Elasticsearch)

搜索引擎。

2024-06-14 14:49:43 535

原创 srpingboot&jdk&maven&nocos版本关联

spring全家桶版本关联

2022-07-01 11:36:39 122

原创 【无标题】

JVM从入门到精通为什么学习JVM面试常驻嘉宾,知根知底才能百战不殆生产过程中遇到瓶颈,需要打开仁通二脉,这块必须拿下想从正面、侧面,方方面面的了解java的生存环境,提高对java的了解,jvm你值得拥有JVM是怎么运行java程序的java 程序 javac .class 类加载器编译称机器码 (一次编译到处执行)JDK >JRE >JVM (关系)JVM的client 运行模式 和server运行模式的区别是什么?JVM有两种运行模式Server 与 Client两种模式的区别在于,C

2022-07-01 10:54:30 1109

原创 收集学习网站

书栈网:https://www.bookstack.cn/explore?cid=11&tab=popular值得信赖的万事指南:https://zh.wikihow.com/%E9%A6%96%E9%A1%B5全历史:https://www.allhistory.com/

2022-04-15 10:54:00 254

原创 idea2021.3快捷键

本文主要介绍idea2021.3常用快捷键(未完待续)

2022-04-02 09:47:40 381

原创 BigDecimal八种舍入模式测试用例

BigDecimal计算函数加法 add()函数 减法subtract()函数乘法multiply()函数 除法divide()函数 绝对值abs()函数八种舍入模式解释如下1、ROUND_UP舍入远离零的舍入模式。在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。注意,此舍入模式始终不会减少计算值的大小。2、ROUND_DOWN接近零的舍入模式。在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。注意,此舍入模式始终不会增加计算值的大小。3、

2022-04-01 19:30:37 234

原创 实战Linux docker安装es

docker 安装 elasticsearch设置max_map_count不能启动es会启动不起来设置max_map_count不能启动es会启动不起来1.查看max_map_count的值 默认是65530cat /proc/sys/vm/max_map_count2.重新设置max_map_count的值sysctl -w vm.max_map_count=2621443.下载镜像并运行#拉取镜像docker pull elasticsearch:7.7.0#启动镜像do

2022-03-31 16:55:27 562

maven3.6.3资源包

idea 2021.03 maven 3.8.5 遇到下边问题 换成3.6.3 版本 解决 1) Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator: method 'void <init>()' not found at org.jetbrains.idea.maven.server.embedder.CustomModelValidator.<init>(Unknown Source) while locating org.jetbrains.idea.maven.server.embedder.CustomModelValidator at ClassRealm[maven.ext, parent: ClassRealm[plexus.core, parent: null]] (via modules: org.eclipse.sisu.wire.WireModule -> org.ecli

2022-04-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除