- 博客(81)
- 收藏
- 关注
原创 Git简介
1诞生背景与技术目标Git 由 Linus Torvalds 于 2005 年 开发,初衷是为高效管理 [[Linux]]内核开发的庞杂代码。此前版本控制系统(如 CVS、SVN)存在性能瓶颈和集中式架构缺陷,无法满足分布式协作需求。核心设计:采用分布式版本控制(DVCS),每个开发者拥有完整的代码仓库副本,支持离线操作、高速分支管理和强数据完整性(通过 SHA-1 哈希校验)。技术演进与普及开源与标准化:Git 以 GPL 协议开源,迅速成为全球开发者的基础工具。
2026-01-01 19:01:37
958
原创 Git分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)
2026-01-01 19:01:01
285
原创 Git常用命令
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。warning]注意:这里设置用户签名和将来登录Gitub(或其他代码托管中心)的账号没有任何关系。
2026-01-01 19:00:12
719
原创 Spring框架全面学习总结
本文系统总结了Spring框架的核心技术与应用实践。首先介绍了反射机制、动态代理和设计模式等基础原理,这些是Spring实现IoC和AOP的技术基础。其次详细解析了IoC容器、Bean管理、依赖注入、AOP和事务管理等核心组件特性。然后对比了XML配置和注解配置两种方式,阐述了自动装配机制及其解决循环依赖的原理。最后介绍了Spring与Log4j2的集成配置方法。全文涵盖了Spring框架从基础到应用的关键知识点,为开发者提供了全面的技术参考。
2025-12-29 12:49:23
1057
原创 关于springAOP的总结
12.4号14:01我终于整理完笔记,理清了所有知识点。关于spring的两大核心:Ioc和AOPAOP的底层:动态代理技术。
2025-12-29 12:48:51
936
原创 (45)Spring中的八大模式(了解有个印象即可)
BeanFactory的getBean()方法,通过唯一标识来获取Bean对象。类似于是典型的简单工厂模式(静态工厂模式),但是是 Spring 实现控制反转(IoC)的核心接口,它通过配置驱动的方式管理 Bean 的生命周期和依赖关系。虽然它提供了类似工厂的getBean()方法,但从设计复杂度和功能上看,它远超简单工厂模式,不应被归类为简单工厂或静态工厂。NOTE] 客户端客户端(Client)通常指的是使用某个组件、服务或 API 的代码或开发者所编写的业务逻辑。
2025-12-29 12:48:16
767
原创 (44)Spring6集成MyBatis3.5(了解即可,大部分用springboot)
连接数据库的工具有很多,除了之前我们使用的navicat for mysql之外,也可以使用IDEA工具自带的DataBase插件。一定要注意,按照下图提示创建这个目录。注意是斜杠不是点儿。在resources目录下新建。并且要和Mapper接口包对应上。如果接口叫做AccountMapper,配置文件必须是AccountMapper.xml。放在类的根路径下,只开启日志,其他配置到spring.xml中。
2025-12-29 12:47:45
656
1
原创 (43)Spring6整合JUnit5(了解即可,大部分用springboot)
/</</</</</</</</</</</</</</</</</</</</</</</</</</</</执行结果如下:Spring提供的方便主要是这几个注解:在单元测试类上使用这两个注解之后,在单元测试类中的属性上可以使用@Autowired。比较方便。
2025-12-29 12:47:10
294
原创 (42)事务的两种开发模式
编写一个类来代替配置文件,代码如下:测试程序如下:执行结果:数据库表中数据:配置步骤:记得添加aspectj的依赖:Spring配置文件如下:记得添加aop的命名空间。将AccountServiceImpl类上的@Transactional注解删除。编写测试程序:执行结果:数据库表中记录:通过测试可以看到配置XML已经起作用了。
2025-12-28 14:39:42
254
原创 (41)事务属性(建议在数据库深入学习)
事务属性主要包括传播行为、隔离级别、超时设置、只读设置和异常处理规则。传播行为定义了事务嵌套时的处理方式(如REQUIRED、REQUIRES_NEW等7种);隔离级别控制事务间的可见性(READ_UNCOMMITTED至SERIALIZABLE),解决脏读、不可重复读和幻读问题;超时设置限制事务执行时长;只读事务优化性能;异常处理规则可指定特定异常触发回滚或忽略回滚。通过@Transactional注解可配置这些属性,如@Transactional(propagation=Propagation.REQU
2025-12-28 14:39:11
943
原创 (40)Spring对事务的支持
act-001账户向act-002账户转账10000,必须同时成功,或者同时失败。(一个减成功,一个加成功, 这两条update语句必须同时成功,或同时失败。Spring对事务的管理底层实现方式是基于AOP实现的。PlatformTransactionManager接口:spring事务管理器的核心接口。在类上添加该注解,该类中所有的方法都有事务。在某个方法上添加该注解,表示只有这个方法使用事务。模块名:spring6-013-tx-bank(依赖如下)通过测试,发现数据没有变化,事务起作用了。
2025-12-28 14:38:31
893
原创 (39)AOP的实际案例
项目中的事务控制是在所难免的。在一个业务流程当中,可能需要多条DML语句共同完成,为了保证数据的安全,这多条DML语句要么同时成功,要么同时失败。这就需要添加事务控制的代码。这个控制事务的代码就是和业务逻辑没有关系的“以上伪代码当中可以看到这些交叉业务的代码没有得到复用,并且如果这些交叉业务代码需要修改,那必然需要修改多处,难维护,怎么解决?可以采用AOP思想解决。可以把以上控制事务的代码作为环绕通知,切入到目标类的方法当中。
2025-12-28 14:38:00
271
原创 (36)通知与切面
执行结果:通过上面的执行结果就可以判断他们的执行顺序了,这里不再赘述。结果中没有异常通知,这是因为目标程序执行过程中没有发生异常。再次执行测试程序,结果如下:通过测试得知,当发生异常之后,最终通知也会执行,因为最终通知@After会出现在finally语句块中。出现异常之后,和不会执行。
2025-12-25 21:54:57
563
原创 (35)使用Spring的AOP
实际开发中,都是Spring+AspectJ来实现AOP。所以我们重点学习第一种和第二种方式。什么是AspectJ?(Eclipse组织的一个支持AOP的框架。AspectJ框架是独立于Spring框架之外的一个框架,Spring框架用了AspectJ)AspectJ项目起源于帕洛阿尔托(Palo Alto)研究中心(缩写为PARC)。
2025-12-25 21:54:32
774
原创 (34)面向切面编程AOP
一般一个系统当中都会有一些系统服务,例如:日志、事务管理、安全等。交叉业务这些交叉业务几乎是通用的,不管你是做银行账户转账,还是删除用户数据。日志、事务管理、安全,这些都是需要做的。第一:交叉业务代码在多个业务流程中反复出现,显然这个交叉业务代码没有得到复用。并且修改这些交叉业务代码的话,需要修改多处。第二:程序员无法专注核心业务代码的编写,在编写核心业务代码的同时还需要处理这些交叉业务。使用AOP可以很轻松的解决以上问题。
2025-12-23 15:10:13
709
原创 (33)动态代理主要的三种方式
ClassPool字节码的“容器”,管理所有 CtClass。默认使用当前线程上下文类加载器。Javassist = 让字节码操作变得像写 Java 一样简单。它降低了动态代理、AOP、代码生成等高级技术的门槛,是 Java 元编程(Metaprogramming)的重要工具之一。虽然在高性能场景下可能被 ASM 或 Byte Buddy 取代,但在开发效率优先的场景(如测试、脚本化增强、教学演示)中,Javassist 依然是非常优秀的选择。
2025-12-23 15:08:37
1121
原创 (32) 代理
牛村的牛二看上了隔壁村小花,牛二不好意思直接找小花,于是牛二找来了媒婆王妈妈。这里面就有一个非常典型的代理模式。牛二不能和小花直接对接,只能找一个中间人。其中王妈妈是代理类,牛二是目标类。王妈妈代替牛二和小花先见个面。(现实生活中的婚介所)【在程序中,对象A和对象B无法直接交互时。:你刚到北京,要租房子,可以自己找,也可以找链家帮你找。其中链家是代理类,你是目标类。你们两个都有共同的行为:找房子。不过链家除了满足你找房子,另外会收取一些费用的。(现实生活中的房产中介)【在程序中,功能需要增强时。
2025-12-23 15:07:53
783
原创 (31)GoF之代理模式
牛村的牛二看上了隔壁村小花,牛二不好意思直接找小花,于是牛二找来了媒婆王妈妈。这里面就有一个非常典型的代理模式。牛二不能和小花直接对接,只能找一个中间人。其中王妈妈是代理类,牛二是目标类。王妈妈代替牛二和小花先见个面。(现实生活中的婚介所)【在程序中,对象A和对象B无法直接交互时。:你刚到北京,要租房子,可以自己找,也可以找链家帮你找。其中链家是代理类,你是目标类。你们两个都有共同的行为:找房子。不过链家除了满足你找房子,另外会收取一些费用的。(现实生活中的房产中介)【在程序中,功能需要增强时。
2025-12-23 15:06:41
673
原创 (30)JdbcTemplate(了解即可现在没人用了)
JdbcTemplate是Spring提供的一个JDBC模板类,是对JDBC的封装,简化JDBC代码。当然,你也可以不用,可以让Spring集成其它的ORM框架,例如:MyBatis、Hibernate等。接下来我们简单来学习一下,使用JdbcTemplate完成增删改查。
2025-12-23 15:06:08
647
原创 (27)全注解式开发
编写测试程序:不再new ClassPathXmlApplicationContext()对象了。所谓的全注解开发就是不再使用spring配置文件了。写一个配置类来代替配置文件。
2025-12-20 13:28:39
128
原创 (26)负责注入的注解
Component @Controller @Service @Repository 这四个注解是用来声明Bean的,声明后这些Bean将被实例化。接下来我们看一下,如何给Bean的属性赋值。
2025-12-20 13:28:01
694
原创 (25)选择性实例化Bean
假设在某个包下有很多Bean,有的Bean上标注了Component,有的标注了Controller,有的标注了Service,有的标注了Repository,现在由于某种特殊业务的需要,只允许其中所有的Controller参与Bean管理,其他的都不实例化。use-default-filters=“true” 表示:使用spring默认的规则,只要有Component、Controller、Service、Repository中的任意一个注解标注,则进行实例化。
2025-12-16 10:43:43
389
原创 (24)使用的注解的方法
我们可以看到当加入spring-context依赖之后,会关联加入aop的依赖。也就是说,这个BankDao的bean的名字为:bankDao。创建一个新的包:bean2,定义一个Bean类。剩下的两个注解大家可以测试一下。如何使用以上的注解呢?
2025-12-16 10:43:07
517
原创 (23)声明Bean的注解
通过源码可以看到,@Controller、@Service、@Repository这三个注解都是@Component注解的别名。他们都是只有一个value属性。value属性用来指定bean的id,也就是bean的名字。也就是说:这四个注解的功能都一样。
2025-12-15 11:47:57
212
原创 (22) 回顾注解
哪些Bean上有注解,哪些Bean上没有注解,这些我们都不知道,如何通过程序全自动化判断。Target注解用来设置Component注解可以出现的位置,以上代表表示Component注解只能用在类和接口上。接下来,我们来写一段程序,当Bean类上有Component注解时,则实例化Bean对象,如果没有,则不实例化对象。该注解上面修饰的注解包括:Target注解和Retention注解,这两个注解被称为元注解。用法简单,语法格式:@注解类型名(属性名=属性值, 属性名=属性值, 属性名=属性值…
2025-12-15 11:47:03
158
原创 (21)手写Spring框架
Spring IoC容器的实现原理:工厂模式 + 解析XML + 反射机制。我们给自己的框架起名为:myspring(我的春天)
2025-12-15 11:46:20
1270
原创 (20)回顾反射机制
这样的设计也非常合理,因为在同一个类当中,方法是支持重载的,也就是说方法名可以一样,但参数列表一定是不一样的,所以获取一个方法需要提供方法名以及每个形参的类型。获取一个方法,需要告诉Java程序,你要获取的方法的名字是什么,这个方法上每个形参的类型是什么。我们如何获取到 logout()、login(String,String)、login(String) 这三个方法呢?第二步:获取方法login(String,String)(四要素之一:哪个方法)要使用反射机制调用一个方法,首先你要获取到这个方法。
2025-12-14 12:54:47
594
原创 (19)Bean的循环依赖问题
A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你,你也依赖我。比如:丈夫类Husband,妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。
2025-12-14 12:54:11
1648
原创 (18)Bean的生命周期
Spring其实就是一个管理Bean对象的工厂。它负责对象的创建,对象的销毁等。所谓的生命周期就是:对象从创建开始到最终销毁的整个过程。什么时候创建Bean对象?创建Bean对象的前后会调用什么方法?Bean对象什么时候销毁?Bean对象的销毁前后调用什么方法?其实生命周期的本质是:在哪个时间节点上调用了哪个类的哪个方法。我们需要充分的了解在这个生命线上,都有哪些特殊的时间节点。只有我们知道了特殊的时间节点都在哪,到时我们才可以确定代码写到哪。我们可能需要在某个特殊的时间点上执行一段特定的代
2025-12-13 17:50:50
1074
原创 (17)注入自定义Date
我们前面说过,java.util.Date在Spring中被当做简单类型,简单类型在注入的时候可以直接使用value属性或value标签来完成。但我们之前已经测试过了,对于Date类型来说,采用value属性或value标签赋值的时候,对日期字符串的格式要求非常严格,必须是这种格式的:Mon Oct 10 14:30:26 CST 2022。其他格式是不会被识别的。这种情况下,我们就可以使用FactoryBean来完成这个骚操作。
2025-12-13 17:49:43
219
原创 (16)Bean的实例化
Spring为Bean提供了多种实例化方式,通常包括4种方式。(也就是说在Spring中为Bean对象的创建准备了多种方案,目的是:更加灵活)
2025-12-13 17:49:08
993
原创 (15)抽象工厂模式(了解)
抽象工厂模式特点:抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。它有多个抽象产品类,每个抽象产品类可以派生出多个具体产品类,一个抽象工厂类,可以派生出多个具体工厂类,每个具体工厂类可以创建多个具体产品类的实例。抽象工厂模式相对于工厂方法模式来说,就是工厂方法模式是针对一个产品系列的,而抽象工厂模式是针对多个产品系列的,即工厂方法模式是一个产品系列一个工厂类,而抽象工厂模式是多个产品系列一个工厂类。第三部分:抽象工厂类。
2025-12-11 19:16:46
308
原创 (14)工厂方法模式
如果想扩展一个新的产品,只要新增一个产品类,再新增一个该产品对应的工厂即可,例如新增:匕首。我们可以看到在进行功能扩展的时候,不需要修改之前的源代码,显然工厂方法模式符合OCP原则。工厂方法模式既保留了简单工厂模式的优点,同时又解决了简单工厂模式的缺点。怎么解决简单工厂模式的缺点(不符合OCP开闭原则)的?
2025-12-11 19:16:08
440
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅