WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Layau-code/spring

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌱 Mini-Spring:轻量级 IoC & AOP 容器实现

Spring Logo

🚀 一个手写的 Spring IoC + AOP 容器,支持三级缓存、构造方法推断、自动代理选择等核心功能,帮助深入理解 Spring 的设计原理。


📖 项目介绍

本项目是对 Spring Framework 核心机制 的简化复刻,包含:

  • IoC 容器:Bean 注册、作用域管理、依赖注入、循环依赖解决。
  • AOP 模块:支持 JDK 动态代理 & CGLIB 动态代理,切点表达式匹配,方法拦截链。
  • Bean 生命周期:构造方法推断、初始化、销毁回调、后置处理器。
  • 可扩展机制BeanPostProcessorBeanFactoryPostProcessor,便于扩展和插件化。

目标是用最小可行代码,学习并复现 Spring 核心思想。


✨ 功能特性

IoC 容器

  • 三级缓存:解决字段注入导致的循环依赖。
  • 构造方法推断:自动选择合适的构造器(模仿 Spring 的 ConstructorResolver)。
  • 作用域支持:单例(singleton)、多例(prototype)。
  • 依赖注入@Autowired 自动注入字段。
  • 生命周期注解@PostConstruct@PreDestroy
  • Aware 回调BeanNameAwareBeanFactoryAware

AOP

  • 自动代理选择
    • JDK 动态代理(如果 Bean 实现了接口)
    • CGLIB 动态代理(如果 Bean 没有接口)
  • 切点匹配@Before@After@Around
  • 增强链执行:支持多切面、多增强方法的链式执行。
  • 懒加载代理:仅在需要时创建代理对象,避免性能损耗。

Bean 生命周期

  • 构造方法推断:自动选择合适构造方法并填充依赖。
  • 初始化回调InitializingBean.afterPropertiesSet()
  • 销毁回调DisposableBean.destroy() 与自定义 destroy-method
  • BeanPostProcessor:支持在初始化前后修改 Bean。

🏗️ 核心架构

flowchart TD
    subgraph Context
        A[ApplicationContext LaiYaoApplicationContext]
    end
    subgraph IoC
        B[DefaultBeanFactory]
        C[三级缓存 Singleton/Factory/Early]
        D[BeanDefinitionRegistry]
    end
    subgraph AOP
        E[ProxyFactory JDK/CGLIB 自动选择]
        F[AopHandler 增强链]
        G[PointCutMatcher 切点匹配]
    end

    A --> B
    B --> C
    B --> D
    B --> E
    E --> F
    F --> G
Loading

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages