- 博客(337)
- 资源 (4)
- 收藏
- 关注
原创 Spring学习笔记:Spring IoC基于XML的DI详细配置全解
本文是Spring学习笔记的第三部分,主要介绍了Spring框架中依赖注入的相关配置方法。内容涵盖: 字面量注入 - 使用value标签为基本类型、String和包装类属性赋值 属性文件转换 - 通过propertyEditor将XML配置转换为Properties集合 Bean引用 - 使用ref属性或标签引用其他Bean Parent继承 - 通过parent属性复用父Bean的配置 内部Bean - 在属性配置中定义匿名Bean对象 文章通过具体代码示例展示了XML配置方式,包括构造器注入和sette
2025-06-11 00:29:08
1086
原创 Spring学习笔记:Spring的基于注解的XML的详细配置
本文主要介绍了Spring框架基于XML的IoC容器配置方法。首先介绍了如何搭建Maven工程并添加Spring核心依赖,然后详细讲解了IoC容器的概念及其两种主要实现方式:DefaultListableBeanFactory(懒加载)和ApplicationContext(饿加载)。文章重点说明了Bean的定义过程,从配置元数据到BeanDefinition再到Bean实例的转换机制,并对比了XML、注解和Java三种配置方式。最后通过示例演示了XML配置的具体用法,包括多配置文件加载、Bean命名以及通
2025-06-03 01:16:56
602
原创 Spring学习笔记 IoC容器和XML的IoC装配
Spring框架的核心依赖是spring-context,它包含了Spring的核心组件,其他核心组件也依赖于此。Spring的核心概念是控制反转(IoC),即将对象的创建和属性赋值交给Spring管理。Spring通过IoC容器来管理对象的生命周期、属性及对象间的关系。IoC容器的实现主要依赖于BeanFactory接口及其子类,如ApplicationContext和DefaultListableBeanFactory。 DefaultListableBeanFactory是IoC容器的具体实现,采用懒
2025-05-19 02:06:41
839
原创 Java注解
Java注解的本质是一个接口,其具体实现依赖于框架或自定义逻辑。常见的注解类型包括Java EE(现Jakarta EE)规范中的注解(如@PostConstruct、@Resource),框架定义的注解(如Spring的@Component、@Autowired),以及自定义注解。自定义注解通过反射或动态代理(如JDK动态代理、CGLIB)实现功能,通常结合Spring框架的AOP机制进行自动化处理。例如,通过@Aspect和@Around注解,可以在方法执行前后添加逻辑,实现注解的运行时行为。
2025-05-15 02:26:34
304
原创 Spring注解@Configuration和@AutoConfiguration
但是@AutoConfiguration是自动配置的设计,针对的场景就是starter,这个starter就是一个模块,封装了实现特定功能所需的所有依赖项(如库、框架)及其兼容版本。@Configuration和@AutoConfiguration就差几个字母,看字面的意思AutoConfiguration貌似是自动注入的,但是这个@Configuration也是自动注入的,这个“Auto”是什么意思。@Configuration:是 Spring 的基础配置工具,适用于需要精细控制的场景。
2025-04-28 01:35:03
1103
原创 Spring的Bean实例化涉及到依赖注入,生命周期和常见的使用
举个例子A依赖B,有了Spring的话,,容器会负责创建对象并将它们之间的依赖关系注入,这就是所谓的依赖注入。Spring 的 IoC 生命周期管理通过对 Bean 的实例化、属性赋值、初始化、使用和销毁等阶段的管控,确保 Bean 能够按照预期的方式创建、使用和清理,提高了应用程序的可维护性和可扩展性。在 Spring 框架里,控制反转(IoC)的生命周期管理指的是 Spring 容器对其所管理的 Bean 从创建、初始化、使用到销毁整个过程的全面管控。经过前面的步骤,Bean 就可以被应用程序使用了。
2025-04-25 02:14:49
550
原创 线程安全与Java内存模型
回归需求本身,我有一个表要筛选出符合状态的数据,然后匹配关联的数据,校验状态更新,根据状态以及规则设置判断其中的数据,是否要更新另一张表的状态,要求这是一个不断循环的程序,要求高效处理,多线程处理。就是我接受一个外来参数,这个参数是可变的,它可能是一个对象,我们对他深拷贝(记住是深拷贝)或者直接new一个新的对象,将外来的对象属性赋给新的对象。如果涉及到没办法,必须要用成员变量,举个最新的例子就是Map的实现,一个是HashMap,一个是ConcurrentHashMap,将需要同步机制。
2025-04-24 01:45:37
499
原创 Spring源码 AOP
这里我们用若以这个目前比较人多用的脚手架来学习AOP,贴近我们项目,而不是idea里面跳一跳。从项目启动开始来学习Spring源码,以及AOP的在整个过程中是如何起作用,都做了什么。AOP是Spring框架的一个重要特性,日志,事务,安全,权限控制等都是依赖它参与实现的。
2025-04-08 00:46:20
94
原创 deepseek本地部署以及搭建知识库
以后可能我们都需要一个自己知识库,帮助我整理分析,另一方面我们也可以从别人的知识库学到东西,现在很多相关的产品都出来了,我们还可以通过付费买token的方式帮助训练自己的知识库,后面我可能会进一步选择部署优化知识库这个,因为这个对于一些组织来说确实还挺必要的,自己本地部署一个知识库,相当于多了一个任劳任怨,经验丰富的老员工,有什么问题可以直接问它,它给你更贴合对应情况的,符合自己公司策略的解决方案。后面要创建我们自己的知识库以及补充相关的知识,这就要在管理知识那里创建和上传资料,大概如下。
2025-02-21 18:43:54
1027
原创 问一下,你熟悉多线程吗
线程池,就会涉及到线程的生成,我们知道线程的生成,有Runable和继承Thread这两种方法,为什么实现Runable接口的方式就是比继承Thread类要好要灵活,这个涉及到Java不能多重继承的问题,用接口更方便,不会涉及到修改一改就要一直往上改,比较麻烦,解耦的方式。(不能实现非公平锁)首先说一下这个多线程涉及到的,问题点,线程池,锁,线程安全,线程生成,JUC包,乐观锁悲观锁,线程池参数,ThradLocal,JDK虚拟线程。所以多线程为什么会有锁这个概念,锁的就是资源,锁的是同一个进程内的资源。
2025-01-09 15:38:10
434
原创 Java的Cursor的使用
实际上这个在数据量小的时候,实际上没啥差距,甚至普通的查询遍历可读性更强。主要是面对数据量大的时候,也就是大数据集处理会体现出的优势,主要的原理就是它可以逐行读取数据,而不是先把整个结果集读取加载到内存中,这样就可以节省内存空间。这个我么们可以通过idea工具来查看,总之当遇到一个大数据集加载导致占用内存飙升甚至内存溢出,可以考虑采用这个Cursor工具,来减小内存占用以及Cursor的并发提高效率算短时间。这里说的Cursor,一般来是JDBC的工具,像我在项目中的mybatis里面的Cursor。
2024-08-15 19:48:07
6860
2
原创 如何使用WEB前端模板
着你需要有一个自己的前端工程大体框架,买模板只是把一些样式设计卖给你,你还是要有自己前端框架,把这些整合进去。不是打开时,全是现成的东西。添加模板文件到自己web工程里面,把上面这些文件夹添加进去,看自己的文件情况,一般来说按我看法就是不一定是放在根目录里面。首先创建一个前端工程,我这里用的是Bootstrap5,你也想弄一个的话可以翻一翻我前面关于Bootstrap5和Webpack的工程构建博客。下载模板,既然是Bootstrap,我们下载对应类型的模板,我是直接从Bootstrap官网下载的模板。
2024-04-19 00:25:25
684
原创 搭建Bootstrap5+Webpack项目
你可能会问Webpack是什么,这是一个打包工具,提供了一种方式,打包JavaScript应用程序的资源,JavaScript,CSS,图片这些。我们这里的是npm来安装下载Bootstrap,当人你也可以使用别的工具yarn,RubyGems等其他的工具来下载,这里是用npm命令行输入命令的形式下载Bootstrap。安装 Bootstrap。后面我们要加入一些额外的依赖,比如css的加载器,sass加载器,style加载器,,postcss加载器,以及autoprefixer支持不同浏览器CSS代码。
2024-04-18 15:19:36
1280
原创 Java web工程的Jar包启动以及一下要注意的问题
WAR文件的结构遵循Java EE标准,包含了Web应用程序需要的所有内容,如:JSP、Java类、图片、库文件(lib文件夹下的JAR文件)、部署描述符(WEB-INF/web.xml)等。web工程是多种模块/module的形式,这些模块是依赖关系,如果我们的修改不是对应web模块,我们打包的module模块的jar包是没有更新修改,因为jar包里面对应修改的依赖jar包没有更新。我们找到对应的jar包的位置,可以直接在idea的命令行里面执行java的jar命令来执行启动jar包。
2024-02-24 11:34:24
897
1
原创 时间戳的大小写的坑
这里也会有个问题,就是用错的情况下,所有时间在上午显示转换是正常的,但是下午的就会后我们直觉的“几点”有差异。但是这个要比2023年12月31日,周年制要好弄一点,我这个“周日是一周的第一天”这个规则,而且还是属于国际标准下的一个标准之一,属实让我当天没想开,之前只是知道如果这一周跨周了不行,但没想当这一周的开始和结尾是什么?首先是年份,最常用的是小写yyyy,如果用的是大写那采用的是周年制,顾名思义这个年份还要看周的限制,假如对应的日期所在的周跨年了,那这个年也要跟着“加一”。我的公众号:我是坑货。
2024-01-15 02:33:13
841
原创 @Aspect注解切面编程
但是还有一个特点就是AOP,就是面向切面编程。市面常见的资料一举例子就是日志,关键是真正项目我们都会引入日志包,根本不需要你去设置什么切面。所以对于面向切面编程,到底是个啥,估计有的人还是有点懵。我们经常说Spring两个特点,一个是IOC控制反转,这个好说你要是从之前那种需要哪个就要创建那个对象的常规基础面向对象编程走过来,基本来说你大概明白IOC这个给你省了不少事。这里我这里准备用项目中使用的一个切面编程作为例子。这里我首先介绍一下@Aspect注解。
2023-10-10 20:14:20
786
原创 conda安装和使用
这里我这提供一个conda使用例子,就是配置一个独立的 Python 3.10 的环境,并安装好 JupyterLab、OpenAI 以及后面要用到的一系列开发包。你可以在Anaconda Prompt终端上输入上面的命令,这样你在使用conda的过程中,也配置一个独立的 Python 3.10 的环境,并配置一系列开发包。如果现在你想使用python的话,也会涉及到包管理的问题,Java有maven来帮助,python也有类似的工具,conda算是使用的比较多的一个。在创建环境后,需要激活它才能使用。
2023-06-28 14:38:12
1715
原创 Midjourney使用教程:三 图片风格提示
这时候你不在满足简单的提示生成的Midjourney的默认风格图片,实际上你可以通过一些关键词做提示,来改变输出的图片风格,像这些提示词其实并不高大上,但是他的反馈效果确实显而易见,就好比我们用chatGPT有时候会设定一个角色,或者添加一个补充信息,返回的质量会提高不少。类似的提示:1700年代,1800年代,1900年代,1910年代,1920年代,1930年代,1940年代,1950年代,1960年代,1970年代,1980年代,1990年代。类似的提示:决定,快乐的,困,生气的,害羞的,尴尬。
2023-06-25 16:26:46
2219
原创 MidJourney使用教程:一 第一次怎么用Midjourney
还有就是公共频道,那么多人用,自己的图还没完全出完,就被顶到上面去了,有没有什么好的方式,有一个自己的“独享的”空间?创建成功后,你要把MidJourney机器人引到你创建的服务器,找到之前的Midjourney服务器,随便找一个出图的房间,找到侧面成员栏,找到Midjourney机器人点击,选择“添加服务器”到自己的新建的服务器上,这样就可以在你自己的服务器输出图片。V的意思采用图片的构图形式,重新生成一组类似的图片,V1/V2/V3/V4的顺序与U的顺序一样。创建一个服务器,还是那个“加号”,
2023-06-20 11:18:46
1817
原创 MidJourney使用教程:二 初识Prompts
虽然和我搞笑图是有出入的,但是图片地池塘,岸边这些都有,毕竟解析动图相当于微小地短片,靠图片完全展示出还是有难度地,我对于这个动画风格的参数还是很满意的,因为默认的风格有些prompts产生的图片会有点阴沉,甚至有点不舒服地感觉。基础提示,就是很基础,很简短的提示,官网上说可以简单一个单词,一个短多,甚至一个表情符号(emoji),这部剧不服气了,我直接来个money单词来试一下。效果还行(至于他说的表情符号,我认为的意思是上传图片,这个我后面高级提示会有演示)主要组成部分是图片提示,文字提示,参数。
2023-06-16 02:12:48
1865
原创 Git教程:标签
tag 标签其实就算一个,我们下载一些开源项目的时候,在GitHub上经常看到版本,有的项目是通过tag来管理版本的,所以学习一下标签管理对于项目版本还是有很多帮助的,尤其是我们自己创建一个项目,设置版本设置tag,这些和分支,仓库这些开发中常用的一样重要,这是你要交付给被人使用的。这样我们想去找找个版本,就不用几比较难记的commit的版本号了,毕竟靠人脑记这些就挺不靠谱的,看一个关于加密的项目的文档,作者对人脑的对于一些比较长比较晦涩的词语记忆的形容是,“最强随机数生成机器”。
2023-05-19 18:12:13
1217
原创 windows的nvm安装
最近在看一个加密的教程,里面有一个关于node的js加密的代码,代码报错,初步判断可能是node的版本的问题。有一个管理node版本的工具nvm,可以来管理node版本,可以下载安装和切换使用环境的node版本,很希望我们其他的编译环境也可以出类似的工具。
2023-05-15 14:59:04
662
原创 Mockito实战
为什么要有个Mockito,本身Junit就可以做单元测试,为什么还要加一个Mcokito作为单元测试框架。实际上两者不矛盾,甚至两者是搭配着使用的,确切的说Mockito是一个单元测试模拟框架,来帮助发现隐藏bug,提高代码质量。为什么会有这样的作用呢,具体一点的实践场景都有哪些?首先Mockito注重的是一个模拟,本身mock本意就有模仿假装的意思在里面,假设我们的代码需要跟第三方联调,我们需要人家给我们数据,设置前置条件。实际工作中就知道,工作本身可能不太难,但是和人交流协同有时候更消耗时间。
2023-04-19 16:26:17
1025
2
原创 flowable实战(四):构建命令行程序
其实不需要多做什么,直接点击对应的SimpleDemo下面的pom文件,点击右键找到“add maven xxx”的就可以了,转化成maven工程就可以直接上手用了。画的图背后实际还是xml文件,如下,但是其中很多部分都是通用的,但是设计比较复杂的流程或和比较多的话,还是图更直接一点。创建一个maven工程,这个就不赘述了,文档还有其他关于如何创建的maven工程的文章也很多,一搜一大把。有流程了,只是定义了一个而已,实际上我们工作流要的是一个个“审批”,这就是根据流程定义得到的流程实例。
2023-01-10 19:42:36
1058
原创 UNION ALL和LEFT JOIN的区别和使用场景
left join 应该是最常用的一个连接,但是有时候left join也不能包打天下。因为left join是一个获取笛卡尔积的临时表,如果这些的表都是一对一的关系,怎么join都没事。但是实际上我们会遇到很多一对多的对应情况,就需要按照实际情况来判断。举个例子,表A和表B的关联的关系是一对多的,表A和表C也是一对多的情况,这里A和B,C的关系是关联起来一对多,也有A和B,C关联不上得情况。我们这边通过统计数量,b_staus为1取关联B的b_count,c_staus为2时取关联C的c_count。
2023-01-04 22:21:16
3589
原创 MySQL的一些指令,函数以及关键字
因为对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。如果不是索引字段的话其实还好,毕竟MySQL里面会有不少buffer,比如sort buffer这些,实际上是在内存上操作(当然太多了也会走磁盘),其实也挺快的。这里要注意的是id指的是pid,我们发现阻塞的进程直接kill pid就可以。这个里面我准备记录一些比较有意思的MySQL的指令和函数,当然使用函数的时候我们要注意,会不会因为函数导致不走索引,走全表扫描的情况。可以通过show processlist来查看。
2023-01-03 14:41:06
732
1
原创 idea的一些配置分享
有时候我们选择配置,需要重新build才能切换成功,比如说你想用UAT1,但是之前你用的是dev分支。像需要指定环境,其实可以直接配置就可以active profilese 里面添加对应的环境。
2022-12-12 15:32:03
364
原创 Java函数接口:Supplier
之前我们一提到Java8新特性,两个常提的stream和Lambda表达式,实际还有一个大的方向就是函数接口。但是stream和Lambda表达式,使用场景也比较多,基本一推出来,基本日常场景就能用到。但是函数接口就不一样,他需要他自己的使用场景,如果不理解,只背他的定义,实际没啥帮助。这里我就通过介绍使用场景的方式来说一下Supplier函数接口。
2022-11-14 10:44:39
3759
原创 spring源码学习:spring初始化流程
首先借个图,说明一下spring的bean的整个生命流程。销毁什么的这个看图就知道怎么回事,使用的话一般都是纯业务,而且我们更关心spring是怎么初始化的,初始化成我们定义的那个样子。我们就是以这个出发点来看一下spring的大概流程。
2022-10-29 15:06:34
1227
原创 Java函数式编程
函数式编程是程序面向数学的更底层的抽象,将计算过程描述为表达式。简单点讲就是,函数内部涉及的变量都是局部变量,不会像面向对象编程那样,共享类成员变量,也不会像面向过程编程那样,共享全局变量。同样的入参,不管怎么执行,得到的结果都是一样的。Functional Programming 函数式编程,这里的函数类似于一个表达式,类似我们学习中的数学公式,输入端是确定的,那输出端也是确定的,这种就是没有副作用的纯函数。面向对象的编程单元是类或对象,面向过程的编程单元是函数,函数式编程的编程单元是无状态函数。
2022-10-27 19:48:08
685
原创 JDK中各种各样的注解
Deprecated 可以用来注解类、接口、成员方法和成员变量等,用于表示某个元素(类、方法等)已过时。当其他程序使用已过时的元素时,编译器将会给出警告。注解现在使用的场景原越来越多,各大框架的也有自己的注解,这里就是直接列举一下我们再看JDK源码自己的一些常用的注解,使用场景。这些注解平时也会有使用。这个过时的注解其实很有用,比如你旧的接口不想让别人用,但是比要提醒人家,你可以用这个注解。
2022-10-15 20:30:58
244
原创 Java注解:Java注解的基本认识
注解和别的源码对比,有的时候更难以理解,因为很多注解也是靠别的注解来实现的,相当于一层套一层,你对注解不熟悉,你对注解的组成注解使用以及用途肯定也不不会太熟悉。比如说我么们常用的spring注解,有的spring注解是通过别的spring注解构成的,别的spring注解是spring自定义的,自定义的注解是依靠,JDK的元注解(元注解就是用来定义注解的注解)。但是可能会对自己使用的一些注解,是干什么的,来自那个框架那个包有了解,但是具体这个注解是怎么实现,大致结构却是不清楚的。
2022-10-14 11:49:13
283
原创 设计模式:策略模式,模板模式,责任链模式
策略模式,模板模式,责任链模式这三个模式应该是框架中最常用,使用频率最高的设计模式,本身三者就是行为型设计模式,对比创建型设计模式,是用来创建对象,结构型设计模式是搭骨架这种,基本就是一个地方用到,别的地方就不会用了,或者是比较基础底层的。行为型设计模式本身就是为了解决我们业务逻辑扩展的一些痛点,比如说也复杂了,需要对应的设计模式来解决扩展性和优化逻辑,这个其实要比上面两者的情况更多。这边主要是分析回顾一下这三者。
2022-10-13 19:39:06
650
1
原创 设计模式:工厂模式和建造者模式
有时候甚至感觉传统的建造者模式,有时候特别像工厂模式,因为有时候我们会给建造者抽象类定义几个“模板”,这几个模板特别像工厂模式里面的。建造者模式,是自定义的模式,也许我就一个实现类ConcreateBuilder,但是里面参数我自己往里面塞,我可以理论上有无数种类型的。但是这种方式特别像我们常看到的一些比较肤浅的关于设计模式的文章,我们通过去记结构去记名字,实际上区分不出来什么,因为设计模式很多结构差不多,而且实际中最佳范例或者源码里面也不会标出这些,命名不规范这些。对比工厂模式和建造者模式。
2022-10-08 11:29:30
1466
原创 设计模式:中介模式
Observer定义了一对多(one-to-many)的依赖关系, Mediator封装了多个对象互相之间的交互方式. Oberver定义了单向的订阅关系, Mediator通过引入中间件的方式解决多个对象之间混乱的依赖关系与通信方式.中介模式听名字作为中介,在复杂的调用关系中做个中介传递(类似于在状态机中弄一个中心点,所有的关系状态转移交给中介来处理),同样也是一个重在实用意义,实现结构倒是不要求什么,实际上结构跟观察者比较像。中介模式定义了一个单独的(中介)对象,来封装一组对象之间的交互。
2022-09-23 11:07:54
375
原创 设计模式:解释器模式
比如“ 8 3 2 4 - + * ”这样一个表达式,我们按照上面的语法规则来处理,取出数字“8 3”和“-”运算符,计算得到 5,于是表达式就变成了“ 5 2 4 + * ”。然后,我们再取出“ 5 2 ”和“ + ”运算符,计算得到 7,表达式就变成了“ 7 4 * ”。最后,我们取出“ 7 4”和“ * ”运算符,最终得到的结果就是 28。解释器模式也是一个意义用途大于结构,实现方式不固定,并且实际用的并不多,具体一个实现是规则引擎,但是现在有开源或者比较成熟的规则引擎方案。
2022-09-22 10:52:52
189
原创 idea和datagrip的快捷鍵
idea和datagrip都是一家公司出的,而且idea可以直接使用集成的datagrip作为数据库工具。直接一个客户端一边debug的同时直接在工具里查数据。
2022-09-21 14:07:59
1055
原创 设计模式:命令模式
其实这个应该挺好理解的,可以跟工厂模式,策略模式做个对比,工厂模式注重的是创建不同的对象,毕竟是创建型设计模式。适配器,代理,装饰器,桥接,: 他们的共同点是:对方法的增强 不同点: 适配器模式的作用是"适配",通常用于适配不同的组件,新旧系统。都是为了实现排序 命令模式中不同的命令具有不同的目的,对应不同的处理逻辑,并且互相之间不可替换 而简单工厂更侧重返回一个创建的对象。单例模式和享元模式,缓存,静态工厂方法: 他们的共同点是:对象的复用 不同点: 应用享元模式是为了对象"共享使用",节省内存。
2022-09-21 11:33:48
233
原创 设计模式:快照模式
第二,快照本身是不可变的,理论上讲,不应该包含任何 set() 等修改内部状态的函数,但在上面的代码实现中,“快照“这个业务模型复用了 InputText 类的定义,而 InputText 类本身有一系列修改内部状态的函数,所以,用 InputText 类来表示快照违背了封装原则。快照模式是一种行为模式,行为模式可以说是设计模式最大头的一部分,作为行为的解耦,相比于创建型,结构型,实际上不改架构的单纯做业务我觉得行为模式更多一些,搭配别的模式花样更多。备忘录模式是如何做到不违背封装原则的?
2022-09-20 11:53:47
699
Java垃圾回收机制和内存分配
2016-12-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人