- 博客(5)
- 收藏
- 关注
原创 在SpringBoot中使用cglib动态代理的一个问题
首先我们知道,Spring的动态代理使用的是jdk动态代理和cglib动态代理。其中Jdk动态代理基于方法的实现,所以被代理的类必须实现一个接口,才能使用jdk动态代理;cglib动态代理基于继承,代理方法通过继承被代理的类,然后重写目标方法,完成代理。private方法不能被代理final方法不能被代理重点:由于java是单继承多实现的,如果一个类已经继承了其他类,就不能再被代理类继承,按理说,这个类的所有方法都不能被代理,但事实并非如此。
2023-04-17 10:14:36
604
原创 SpringBoot中的异步任务
通过源码可以看到,Spring默认的线程池核心线程数为8,最大线程数为Integer.MAX_VALUE,阻塞队列为Integer.MAX_VALUE,可能造成无限的非核心线程的创建,这是一种资源浪费。编写两个异步任务,方法上使用@Async注解,同时启动类或异步任务类上开启@EnableAsync注解。使用@Async注解开启的异步任务,是Spring自定义线程池实现的。根据Spring自动装配原理,修改Spring默认提供的线程池参数。
2023-03-17 14:41:58
312
原创 SpringBean的生命周期
创建BeanDefinition对象,加载到BeanFactory中,Spring的IOC容器实际上是DefaultListableBeanFactory,这个类用Map,ArrayList等集合保存这些BeanDefinition对象,比如使用set集合保存单例Bean,使用Map做Bean的Calss对象和类名的映射关系。BeanFactoryPostProcessor是BeanFactory的后处理器,可以对BeanFactory进行扩展,比如,在创建Bean实例之前,动态修改Bean定义的属性值。
2022-08-22 01:31:42
212
原创 String类的三种常用拼接方法
使用“+” 连接符操作String类实际上是将String类转为StringBuilder类,调用StringBuilder类的append方法完成字符串拼接操作。concat方法实际上是重新申请一个当前字符串长度+拼接字符串长度的字符数组,然后拼接好的字符串复制到新数组中,然后调用String类的构造方法创建一个新的数组。我们都知道,String类是一个final的,不允许字符串的修改,更不允许字符串的“拼接”创建一个count+len长度的数组,然后将原数组内容和拼接的内容拷贝到新数组中。...
2022-08-09 20:00:08
13507
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人