自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 springBoot启动模拟实现

当前应用中包含spring-boot-starter-web依赖,该依赖存在DispatcherHandler和Servlet,最终被SpringBoot推断为web应用。给SpringApplication添加初始化器,初始化器添加Bean对象到容器中。

2024-06-30 10:51:35 190

原创 java泛型

上述的arrayList是使用泛型的过程中非常常见的例子,arrayList指定了接收的元素类型为String,如果往arrayList添加其他类型元素,则会报编译异常。那么ArrayList则默认接收Object类型元素,这也是jdk1.5之前,java还没有泛型机制时,集合元素的存储类型。T可以写为任意标识,常用T、E、K、V等型式的参数来标识泛型。如果在new ArrayList的时候,没有指定元素类型。泛型定义格式:修饰符 class 类名{}

2024-06-23 13:49:51 200

原创 spring参数解析器

(3)@ModelAttribute 通过key=value的方式将请求参数值赋值给方法,并且可以使用1或多个key=value映射 来构造 对象。(2)@RequestParam 通过key=value的方式将请求参数值赋值给方法。(1)@PathVariable 通过占位符获取特定位置的请求参数值并赋值给方法。本文介绍常见参数处理器的使用场景。

2024-06-23 10:43:27 229

原创 模拟实现AOP调用链

1. proceed() 方法调用链中下一个环绕通知。访问根节点 = 执行proced方法。访问右节点 = 执行 after方法。2. 每个环绕通知内部继续调用 proceed()先访问左节点 = 先执行Before方法。3. 调用到没有更多通知了, 就调用目标方法。

2024-06-21 00:21:14 191

原创 Aop代理创建时机

在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a6d89eb39f114128b5647ff561d52b9a.png。在Bean实例创建后,依赖注入前,创建代理。也可以说是在init方法前创建代理。2. 实例创建后, 依赖注入前 (有循环依赖时), 并暂存于二级缓存。b. 依赖注入与初始化不应该被增强, 仍应被施加于原始对象。Bean1的init方法执行后,代理对象被创建。Bean2使用的是代理后的Bean1。Bean1和Bean2存在循环依赖。

2024-06-20 08:04:27 297

原创 spring切面

(2)创建advice。(3)创建aspect。

2024-06-18 08:30:31 184

原创 jdk代理模拟

方法2可以对foo方法做各种类型的增强,但是当Foo类不止一个方法需要增强,并且动态的选择调用哪一个方法时,方法2就无法解决了。当做参数传到InvocationHandler的invoke方法内,也就是被增强方法被当做参数传到了增强方法内。本文模拟实现了jdk代理,从固定逻辑到策略模式,从代理单个方法到代理多个方法,循序渐进。实现不同的InvocationHandler接口即可调用不同的方法。调用proxy.foo方法时,将Foo接口的foo方法。将被增强的方法作为参数从而实现代理不同的方法。

2024-06-16 15:44:18 455

原创 AOP-cglib动态代理

【代码】AOP-cglib动态代理。

2024-06-16 11:06:13 133

原创 AOP-jdk实现

【代码】AOP-jdk实现。

2024-06-16 10:14:13 193

原创 Spring Ajc增强

因为MyAspect并没有添加@Component注解,所以MyAspect并没有被Srpring管理。上述代码实际上是使用aspectJ来实现增强。发现foo内部加入了切面方法,实现了增强。

2024-06-15 08:33:38 327

原创 spring bean初始化方法

【代码】spring bean初始化方法。

2024-06-14 21:10:31 56

原创 自定义实现ComponentScan后处理器

【代码】自定义实现ComponentScan后处理器。

2024-06-13 23:07:29 178

原创 bean线程安全问题

在单例Bean中,如果在类中声明成员变量,并且有读写操作(有状态的),就会出现线程不安全问题。总结:有状态的单例bean线程不安全,无状态的单例Bean线程安全。把成员变量声明在方法中,那么单例Bean就是线程安全的了。由此可知,bean并不是线程安全的。bean线程安全嘛?

2024-06-13 08:28:29 150

原创 Autowired运行分析

(2)bean工厂对DependencyDescriptor进行解析即可以获取到属性,方法和方法参数的值。autowired在注入时会使用InjectedMetaData来获取属性和方法的值,并进行注入。(1)DependencyDescriptor记录了属性,方法,方法参数的描述信息。(1)和(2)都是metadata.inject()方法内部执行的步骤的简化。dd3描述了setHome方法的第一个参数,对dd3进行解析,获取该参数的值。

2024-06-05 08:31:09 162

原创 SpringBean生命周期

提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

2024-06-04 08:19:01 224

原创 Bean生命周期加载模板方法

在一个方法中有固定的流程,固定的部分方法,会变的部分方法。可以将会变的方法设计为抽象方法,在使用过程中,添加不同的实现类来即可实现不同的功能。

2024-04-21 20:09:29 101 1

原创 BeanFactory后处理器

Autowired无法确定inter使用的是哪一个实现类。将inter对象的名字改为bean3,就可以创建bean3对象了。因为当@Autowired发现注解的对象有多个实现类时,会寻找是否有类名和注解的对象名一样。使用@Resource注解按名字获取bean对象同时添加@Autowired和@Resources注解后,按照后处理器的添加顺序决定使用哪个注解的匹配规则来寻找Bean对象。由于Autowired处理器在前,所以先使用Autowired注解来获取bean对象。

2024-04-20 18:46:41 256

原创 BeanFactoty实现

beanFactory不会做的事情(1)不会主动调用BeanFactory后处理器(2)不会主动添加Bean后处理器(3)不会 主动初始化单例(4)不会解析BeanFactory,不会解析${}与#{}而ApplicationContext将以上4件事都做好了。

2024-04-20 16:05:13 409

原创 Application功能

MessageSource可以处理国际化资源,可以在Resources中配置编码对应的各国语言翻译来实现国际化功能。ResourcePatternResolver可以获取资源获取配置信息发布UserRegisterdEvent事件监听事件ApplicationContext和BeanFactory之间并不仅仅是继承的关系,而且ApplicationContext拥有BeanFactory对象。

2024-04-20 14:24:43 343

空空如也

空空如也

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

TA关注的人

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