Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MiniSpring 框架

一个精简版的 Spring 框架实现,用于学习 IoC、DI 和 AOP 原理。

项目特点

  • 代码量控制:核心代码约 1400 行,易于理解和学习
  • 功能完整:实现了 Spring 框架的核心功能
  • 最佳实践:遵循 Spring 框架的设计模式和最佳实践

核心功能

✅ 已实现功能

  1. IoC 容器

    • ApplicationContext 作为容器核心
    • 支持单例(singleton)和原型(prototype)作用域
    • 支持懒加载(@Lazy)
  2. 依赖注入 (DI)

    • 字段注入(@Autowired)
    • 构造函数注入(@Autowired)
    • 按类型自动匹配
    • 按名称注入(@Qualifier)
    • 可选依赖(@Autowired(required=false))
  3. Bean 生命周期管理

    • 初始化回调(@PostConstruct)
    • 销毁回调(@PreDestroy)
    • 支持通过 BeanDefinition 配置初始化/销毁方法
  4. 组件扫描

    • 基于注解(@Component)的自动扫描
    • 支持 @Scope 和 @Lazy 注解
  5. AOP 面向切面编程

    • 基于 JDK 动态代理
    • 前置通知(@Before)
    • 后置通知(@After)
    • 切点表达式匹配

快速开始

运行演示程序

# 编译项目
mvn clean compile

# 运行演示程序
mvn exec:java -Dexec.mainClass="com.minispring.demo.App"

演示程序说明

演示程序位于 com.minispring.demo 包下,包含:

  1. UserRepository - 用户数据访问层

    • 演示:@Component、单例模式、@PostConstruct
  2. UserService - 用户服务层

    • 演示:字段注入、AOP 代理
  3. OrderService - 订单服务

    • 演示:构造函数注入、@Qualifier、原型作用域
  4. LoggingAspect - 日志切面

    • 演示:AOP 切面编程
  5. DatabaseConfig - 数据库配置

    • 演示:@PostConstruct 和 @PreDestroy 生命周期回调

使用示例

1. 创建组件

@Component
public class UserService {
    @Autowired
    private UserRepository userRepository;
    
    // 业务方法...
}

2. 创建应用上下文

ApplicationContext context = new ApplicationContext("com.example.demo");

3. 获取 Bean

// 按类型获取
UserService service = context.getBean(UserService.class);

// 按名称获取
UserService service = context.getBean("userService", UserService.class);

4. 使用 AOP

@Component
@Aspect
public class LoggingAspect {
    @Before("com.example.service.UserService.*")
    public void beforeMethod() {
        System.out.println("方法执行前...");
    }
    
    @After("com.example.service.UserService.*")
    public void afterMethod() {
        System.out.println("方法执行后...");
    }
}

技术栈

  • Java 17 (LTS 版本)
  • Maven 3.8+ 构建工具
  • JUnit 5 测试框架(可选)
  • SLF4J + Logback 日志(可选)

项目结构

src/main/java/com/minispring/
├── beans/              # Bean 相关
│   └── factory/        # BeanFactory 接口和实现
├── context/            # 应用上下文
├── aop/                # AOP 相关
├── stereotype/         # 注解定义
└── demo/               # 演示程序
    ├── model/          # 实体类
    ├── repository/     # 数据访问层
    ├── service/        # 服务层
    ├── aspect/         # 切面类
    └── config/         # 配置类

注意事项

  1. JDK 动态代理限制:只能代理实现了接口的类。如果类没有实现接口,将无法创建代理对象。

  2. 类型转换:由于 AOP 代理,获取 Bean 时建议使用接口类型而不是具体类类型。

  3. 循环依赖:框架会检测循环依赖并抛出异常。

学习建议

  1. ApplicationContext 开始,理解容器的核心机制
  2. 研究 ClassPathBeanScanner,了解组件扫描的实现
  3. 查看 AopProxy,理解动态代理的工作原理
  4. 运行演示程序,观察框架的实际运行效果

许可证

本项目仅用于学习目的。

About

一个精简版的 Spring 框架实现,用于学习 IoC、DI 和 AOP 原理。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages