- 博客(26)
- 收藏
- 关注
原创 使用 AbstractPointcutAdvisor 声明一个通知器
本文展示了如何实现Spring AOP的切面编程。通过创建ControllerAdvisor类继承AbstractPointcutAdvisor,将切点(ControllerPointcut)和通知(ControllerAdvice)组合起来。ControllerPointcut使用ClassFilter和MethodMatcher来匹配方法,其中ControllerMethodMatcher通过检查@Limit注解决定是否应用增强。前置通知ControllerAdvice实现MethodBeforeAdv
2025-10-17 17:42:43
171
原创 nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property ‘id‘ of
这里主要是我调用mapper的insert方法插入时报错。原因是主键id我设置错了。
2025-10-17 17:23:35
177
原创 Spring事务的传播方式
Spring事务传播行为定义了事务方法间的交互方式,主要包括7种模式:1)REQUIRED(默认)存在则加入,否则新建;2)SUPPORTS存在则加入,否则非事务执行;3)MANDATORY强制要求存在事务;4)REQUIRES_NEW始终新建事务;5)NOT_SUPPORTED强制非事务执行;6)NEVER禁止存在事务;7)NESTED嵌套子事务。Spring通过ThreadLocal存储事务状态,根据传播行为决定事务处理逻辑。
2025-10-14 15:43:24
341
原创 Spring的完全配置类和非完全配置类详解
方法调用会复用容器实例,有时却会创建新对象?这背后的关键差异,就藏在 “完全配置类” 与 “非完全配置类” 的实现逻辑中。在底层其实会为这个配置类生成代理对象,在调用方法时使用拦截器拦截方法的调用,然后到。但你是否注意到,同样是配置类,有时。其实取决于配置类是不是完全配置类,如果是完全配置类,可以看见两个对象的内存地址是一样的,证明是同一对象。时,这个类默认是完全配置类,也可以通过它的。这里我们引入完全配置类和非完全配置类的概念。注解标注的类才是完全配置类,像使用。标注的类只是非完全配置类。
2025-10-13 14:18:13
459
原创 ConfigurationClassPostProcessor类的作用源码详解
摘要:ConfigurationClassPostProcessor是Spring容器中处理注解驱动配置的核心组件,主要负责解析@Configuration、@ComponentScan等注解,并将配置类转化为BeanDefinition注册到容器。它通过实现BeanDefinitionRegistryPostProcessor接口,在容器刷新阶段执行配置类的解析和注册工作。该处理器会识别完全配置类(@Configuration)和非完全配置类(@Component),并对完全配置类进行CGLIB代理以确保
2025-10-13 09:02:10
2990
原创 SpringBoot3整合MybatisPlus
在resource目录下创建application.yml文件,把地址,数据库,用户名,密码替换为你自己的。首先我们引入mybatis和mysql的依赖。
2025-10-12 08:27:30
115
原创 Description:Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded da
2.在resources目录下创建application.yml文件。当我们启动SpringBoot时未配置数据源时会触发报错。如果你是SpringBoot3的版本你加入下面的依赖。1.如果不需要使用数据源直接排除掉。
2025-10-12 08:27:11
157
原创 使用@Aspect声明切面
本文介绍了在Spring Boot项目中使用AOP的基本方法。通过@Aspect注解声明切面类,用@Pointcut定义切点,@Before和@After注解实现前置、后置增强。由于Spring Boot已自动配置,无需额外使用@EnableAspectJAutoProxy开启AOP功能。这种简洁的配置方式使开发者能够快速实现面向切面编程。
2025-10-11 16:55:20
204
原创 MetadataReaderFactory元数据工厂的作用
底层处理注解的时候都是通过元数据工厂获取类的元数据然后进一步处理的,至于类元数据就不说了,就是可以获取到类的名字,实现的接口之类的信息,好了本篇文章就讲到这。等注解的底层实现逻辑,更能在需要自定义类扫描、元数据处理的场景(如开发框架、中间件)中,借助它高效地操作类元数据,是进阶。这个方法可以获取到类的所有方法的元数据,可以通过这个方法原数据获取方法上的注解,方法名,方法返回值这些。对象可以获取到类的类元数据和它的注解元数据,通过名字就知道一个重点在类,一个重点在注解。会缓存类的元数据,适合高频解析(如。
2025-10-11 13:11:34
849
原创 BeanDefinitionRegistryPostProcessor接口的作用
摘要:BeanDefinitionRegistryPostProcessor是Spring框架中用于动态管理Bean元数据的核心接口,它允许开发者在Bean实例化前修改容器配置。通过实现该接口并重写postProcessBeanDefinitionRegistry方法,可以操作BeanDefinitionRegistry注册表,动态添加、移除或修改Bean定义。文章通过User类示例,展示了如何使用BeanDefinitionBuilder创建BeanDefinition并注册到Spring容器,以及如何通
2025-10-11 10:29:19
471
原创 @EnableFeignClients注解的作用
Spring Cloud中的@EnableFeignClients注解是开启Feign远程调用的关键组件。该注解通过FeignClientsRegistrar实现两个核心功能:注册默认配置(通过defaultConfiguration属性)和扫描Feign客户端接口(通过value/basePackages或clients属性指定)。在扫描阶段,会收集带有@FeignClient注解的接口,将其属性封装到FeignClientFactoryBean并注入Spring容器。该工厂Bean负责在首次调用时生成代
2025-10-10 17:34:29
1074
原创 ImportBeanDefinitionRegistrar接口的作用
是 Spring 框架中基于注解驱动注册 BeanDefinition 的核心接口,隶属于org.springframework.context.annotation包,是@Import注解发挥 “灵活导入 Bean” 功能的关键实现类之一。的作用就是可以向spring获取注册的Bean的BeanDefinition,然后进行修改。的作用就是可以获取导入该 Registrar 的类的注解信息,类似于。,然后再获取导入该 Registrar 的类的注解信息,填充到。类似的大家也可以看看其它的使用@
2025-10-10 13:13:39
948
原创 SpringBoot主启动类的注册过程
SpringBoot主启动类通过@SpringBootApplication标注,其注册过程具有特殊性。不同于普通Bean的@ComponentScan扫描方式,主启动类在SpringApplication.run()执行时通过BeanDefinitionLoader主动加载。关键步骤包括:获取主启动类Class集合,创建BeanDefinitionLoader进行加载,最终由ConfigurationClassPostProcessor完成后续解析。整个过程体现了SpringBoot对主启动类的"
2025-10-10 09:33:39
429
原创 @EnableAspectJAutoProxy注解的作用
本文解析了Spring中@EnableAspectJAutoProxy注解的核心作用与实现机制。该注解通过@Import引入AspectJAutoProxyRegistrar类,向容器注册AnnotationAwareAspectJAutoProxyCreator这个关键基础设施Bean。注册过程会处理代理类型(JDK/CGLIB)和代理对象暴露(ThreadLocal)等配置属性。最终,该基础设施Bean会为需要增强的类生成代理对象,实现AOP功能。注解采用优先级策略确保始终使用功能最全的Annotati
2025-10-09 20:21:15
592
原创 SpringAop底层源码详解
本文深入剖析了Spring AOP的底层实现机制,从核心概念到源码流程进行了系统拆解。首先介绍了Spring AOP通过自动配置引入AnnotationAwareAspectJAutoProxyCreator作为代理创建器,详细解析了代理对象的创建过程(包括CGLIB代理的生成逻辑)和拦截器链的构建方式。重点分析了切面注解的解析流程、目标方法的匹配机制,以及动态代理执行时通知链的递归调用过程(Before/After等通知的执行顺序)。通过源码追踪,揭示了Spring如何将@Aspect注解转化
2025-10-09 14:55:52
1344
原创 @MapperScan注解的作用
从@MapperScan注解获取到它的注解属性,然后将这些属性赋值给 MapperScannerConfigurer的属性,最后注册到Spring。在处理@Import注解时,底层其实会判断是否实现该接口,然后收集到一个list里,后面统一调用实现的方法。上面获取了@MapperScan注解的属性,然后调用注册BeanDefinition的方法。MapperScannerConfigurer的BeanDefinition。一般这个接口是配合@Import注解使用的。首先我们看看它的内部。
2025-10-06 20:32:39
337
原创 Spring中Bean的实例化过程详解
本文深入解析了Spring IOC容器中Bean实例化的核心流程。首先介绍了实例化作为Bean生命周期第一步的重要性,涉及构造器、工厂方法等多种创建方式。然后详细剖析了getBean()方法的执行路径,包括类型匹配、候选Bean筛选(基于@Primary和@Priority)、依赖检查等关键步骤。重点分析了doCreateBean()方法,涵盖实例创建、属性填充(处理@Autowired等注解)、初始化回调(Aware接口、InitializingBean)以及循环依赖解决方案(三级缓存机制)。文章还探讨了
2025-10-06 18:05:29
2609
原创 ClassPathBeanDefinitionScanner作用详解
好了,ClassPathBeanDefinitionScanner这个类的作用就说完了,其实就是扫描包下符合条件的类,然后生成它的Bean定义,注册到Bean工厂。this.findCandidateComponents(basePackage)这个方法是如何扫描到BeanDefinition的。它的构造器指定了需要扫描的注解,配置了需要用到的东西,像注册表,上下文环境。这里扫描到之后通过元数据工厂加载它的元数据,然后封装为。这里开始对指定的包进行扫描,我们看看。我们看看扫描类路径的。
2025-09-30 17:55:20
619
原创 natapp使用教程
摘要:NATAPP内网穿透使用教程:首先注册并登录官网,购买免费隧道并设置端口映射。在"我的隧道"中查看authtoken和分配域名。下载Windows客户端后运行natapp.exe,输入命令"natapp.exe -authtoken=你的token"(token在隧道详情中查看)即可启动服务。整个过程简单快捷,适合需要内网穿透的用户快速搭建外网访问通道。
2025-09-30 14:28:38
296
原创 @EventListener注解的处理过程
文章摘要: Spring通过EventListenerMethodProcessor处理@EventListener注解,实现事件监听器的自动注册。该处理器在Bean初始化阶段扫描带注解的方法,利用EventListenerFactory生成适配监听器ApplicationListenerMethodAdapter,并解析注解中的事件类型和条件表达式(SpEL)。事件发布时,广播器通过缓存机制高效匹配监听器,最终由适配器反射调用目标方法,并基于SpEL条件决定是否处理事件。整个过程隐藏了底层复杂度
2025-09-28 15:59:38
992
原创 npm ERR! A complete log of this run can be found in:npm ERR! C:\Users\31606\AppData\Roaming\npm
将这两个文件删除 node_modules package-lock.json。
2025-09-26 17:58:46
146
原创 vue报错npm ERR! This is probably not a problem with npm. There is likely additional logging output abo
执行 set NODE_OPTIONS=--max-old-space-size=4096。最后npm run serve。项目太大了,内存不够。
2025-09-26 17:55:05
143
原创 Spring上下文刷新流程详解
对于大多数开发者而言,“刷新上下文” 或许是一个 “熟悉又陌生” 的概念。我们每天调用启动应用时,底层正是方法在驱动;我们配置@Bean或自定义时,其生效时机也深埋在刷新流程的某个环节。但很少有人停下脚步细究:刷新操作究竟包含哪些步骤?下面我们来详细说说。
2025-09-26 10:58:38
2332
1
原创 @SpringBootApplication注解的作用
本文深入解析了SpringBoot自动配置的核心机制。通过分析@SpringBootApplication注解,发现其由@Configuration、@EnableAutoConfiguration和@ComponentScan组成。重点阐述了@EnableAutoConfiguration通过@Import注入AutoConfigurationImportSelector,ConfigurationClassPostProcessor对配置类的处理流程DeferredImportSelector的延迟处理
2025-09-25 12:11:00
1090
1
原创 SpringBoot启动流程详解
本文深入剖析了SpringBoot应用启动的核心流程。当调用SpringApplication.run()方法时,系统会依次执行:1)初始化SpringApplication实例,判断应用类型并加载BootstrapRegistryInitializer等组件;2)创建启动上下文,发布启动事件;3)准备环境配置,处理banner显示;4)根据是否使用AOT技术创建对应的应用上下文;5)通过ApplicationContextInitializer提前注册bean;6)刷新上下文,完成bean工厂初始化、事件
2025-09-23 11:07:05
1229
原创 ERROR Maxwell - Maxwell couldn‘t find the requested binlog, exiting...
因为是之前maxwell太久没启动,导致读取binlog偏移量并未同步,这个时候我们把maxwell数据库删除,重新启动maxwell就可以了,会重新生成新的maxwell数据库,如果只是简单使用的话可以这么做。
2025-06-07 20:20:26
201
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅