开源框架之旅
文章平均质量分 69
这里和大家分享企业级使用的开源框架 从使用 解析 婆媳源码方向进行。
编程、小哥哥
七年 IT工程师一名 现目前在基金投研公司担任java 大数据开发工程师 天天不是在写软件就是在写bug的路上。
展开
-
自定义动态数据源+事务控制
以上是自定义动态数据源+事务控制 关注老哥带你上高速。在业务类型上添加如下的代码实现切换。定义DataSource注解。原创 2024-07-02 16:32:25 · 197 阅读 · 0 评论 -
第五步->手撕spring源码之资源加载器解析到注册
这样在接口 BeanDefinitionReader 的具体实现类中,就可以把解析后的 XML 文件中的 Bean 信息,注册到 Spring 容器去了。这里需要注意 getRegistry()、getResourceLoader(),都是用于提供给后面三个方法的工具,加载和注册,这两个方法的实现会包装到抽象类中,以免污染具体的接口实现方法。按照资源加载的不同方式,资源加载器可以把这些方式集中到统一的类服务下进行处理,外部用户只需要传递资源地址即可,简化使用。上述的Resource的接口 同样在。原创 2024-05-12 22:56:17 · 503 阅读 · 0 评论 -
第四步->手撕spring源码之bena注入实现和依赖
其实还缺少一个关于类中是否有属性的问题,如果有类中包含属性那么在实例化的时候就需要把属性信息填充上,这样才是一个完整的对象创建。3:另外是填充属性信息还包括了 Bean 的对象类型,也就是需要再定义一个 BeanReference,里面其实就是一个简单的 Bean 名称,在具体的实例化操作时进行递归创建和填充,与 Spring 源码实现一样。2:由于我们需要在创建Bean时候填充属性操作,那么就需要在 bean 定义 BeanDefinition 类中,添加 PropertyValues 信息。原创 2024-05-12 18:28:14 · 333 阅读 · 0 评论 -
第三步->手撕spring源码之基于Cglib实现实例化策略
把入参信息传递给 newInstance 进行实例化。从不断的完善增加需求可以看到的,当你的代码结构设计的较为合理的时候,就可以非常容易且方便的进行扩展不同属性的类职责,而不会因为需求的增加导致类结构混乱。所以在我们自己业务需求实现的过程中,也要尽可能的去考虑一个良好的扩展性以及拆分好类的职责。3:接下来就需要循环比对出构造函数集合与入参信息 args 的匹配情况,这里我们对比的方式比较简单,只是一个数量对比,而实际 Spring 源码中还需要比对入参类型,否则相同数量不同入参类型的情况,就会抛异常了。原创 2024-05-12 17:43:30 · 793 阅读 · 0 评论 -
第二步->手撕spring源码之bean操作
3:除此之外这个类还实现了接口 BeanDefinitionRegistry 中的 registerBeanDefinition(String beanName, BeanDefinition beanDefinition) 方法,当然你还会看到一个 getBeanDefinition 的实现,这个方法我们文中提到过它是抽象类 AbstractBeanFactory 中定义的抽象方法。所以有时候你会看到一些类的强转,调用某些方法,也是因为你强转的类实现接口或继承了某些类。后续继续完成手写spring源码。原创 2024-05-12 11:38:09 · 997 阅读 · 0 评论 -
第一步->手撕spring源码之Bean容器创建
它的数据结构会尽可能最大限度的让整个数据读取的复杂度在 O(1) ~ O(Logn) ~O(n)之间,当然在极端情况下也会有 O(n) 链表查找数据较多的情况。不过我们经过10万数据的扰动函数再寻址验证测试,数据会均匀的散列在各个哈希桶索引上,所以 HashMap 非常适合用在 Spring Bean 的容器实现上。以上的测试 能简单你的看出 始化 Bean 工厂、注册 Bean、获取 Bean,三个步骤,使用效果上贴近与 Spring,但显得会更简化。1:简单的bean定义 如下。原创 2024-05-11 18:49:05 · 711 阅读 · 1 评论