# SpringDemo **Repository Path**: sky0535/SpringDemo ## Basic Information - **Project Name**: SpringDemo - **Description**: Spring 框架学习项目 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-13 - **Last Updated**: 2026-06-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: Spring ## README # SpringDemo 这是一个 Spring Framework 学习项目,包含多个子模块,用于学习和演示 Spring 的核心概念和高级特性。 ## 项目结构 ``` SpringDemo/ ├── .idea/ # IDE配置文件 ├── DynamicProxy/ # 动态代理示例 ├── Spring01/ # Spring IoC基础 ├── Spring02/ # Spring进阶 ├── Spring03/ # Spring高级特性 ├── SpringAOP/ # Spring AOP切面编程 ├── .gitignore ├── LICENSE ├── README.md └── SpringDemo.iml ``` ## 技术栈 - **Java**: 21 - **Spring Framework**: 6.2.18 - **JUnit**: 5.14.4 (测试框架) - **ByteBuddy**: 1.18.9 (动态代理) - **Logback**: 1.5.34 (日志框架) ## 子模块说明 ### 1. DynamicProxy - 动态代理示例 学习动态代理的两种实现方式: - **JDK动态代理**: 基于接口的动态代理 - **ByteBuddy代理**: 基于字节码生成的动态代理 **核心文件**: - `JDKProxyUtil.java` - JDK动态代理工具类 - `ByteBuddyProxyUtil.java` - ByteBuddy代理工具类 - `TimerInterceptor.java` - 方法拦截器(切面逻辑) - `OrderService.java` / `ProductService.java` - 业务服务接口 **运行方式**: ```bash cd DynamicProxy mvn compile exec:java -Dexec.mainClass="com.examples.JDKProxyClient" mvn compile exec:java -Dexec.mainClass="com.examples.ByteBuddyClient" ``` ### 2. Spring01 - Spring IoC基础 学习 Spring IoC 容器的基本用法: - Bean 的定义和注册 - 依赖注入(setter注入) - 属性文件配置 - 数据源配置 **核心文件**: - `application.xml` - Spring配置文件 - `properties.xml` - 属性文件配置 - `UserService.java` - 服务类(依赖注入演示) - `UserDao.java` / `OrderDao.java` - 数据访问层 **测试类**: - `SpringTest.java` - IoC容器测试 - `PropertiesTest.java` - 属性配置测试 ### 3. Spring02 - Spring进阶 学习 Spring 的进阶特性: - Bean 的作用域(Singleton/Prototype) - 构造器注入 vs Setter注入 - 外部属性文件配置 - 复杂对象装配 **核心文件**: - `scope.xml` - Bean作用域配置 - `datasource.xml` - 数据源配置 - `jdbc.properties` - JDBC属性文件 - `ShopService.java` - 购物服务(多依赖注入) **测试类**: - `ScopeTest.java` - 作用域测试 - `ServiceTest.java` - 服务装配测试 ### 4. Spring03 - Spring高级特性 学习 Spring 的高级特性: - **FactoryBean**: 自定义Bean工厂 - **BeanPostProcessor**: Bean后置处理器(AOP基础) - **循环依赖**: 解决Bean之间的循环引用问题 - **Bean生命周期**: 初始化和销毁回调 **核心文件**: - `PersonFactoryBean.java` - FactoryBean实现 - `DateFactoryBean.java` - 日期对象工厂 - `LogBeanPostProcessor.java` - 日志后置处理器 - `Husband.java` / `Wife.java` - 循环依赖示例 **测试类**: - `ProcessorTest.java` - 后置处理器测试 - `ReferenceTest.java` - 循环依赖测试 - `RegisterBeanTest.java` - Bean注册测试 ### 5. SpringAOP - Spring AOP切面编程 学习 Spring AOP 的核心概念: - **切面(Aspect)**: 横切关注点的模块化 - **切点(Pointcut)**: 匹配连接点的表达式 - **通知(Advice)**: 切面的具体行为(前置/后置) - **基于注解的AOP配置** **核心文件**: - `MyAspect.java` - 切面类(包含前置/后置通知) - `SpringConfiguration.java` - Java配置类 - `spring-aop.xml` - XML配置方式 - `ProductService.java` - 目标服务 **测试类**: - `AOPTest.java` - AOP功能测试 ## 运行测试 每个子模块都可以独立运行测试: ```bash # 进入子模块目录 cd Spring01 # 运行测试 mvn test ``` ## 学习路径建议 1. **DynamicProxy** → 理解代理模式和AOP的底层原理 2. **Spring01** → 掌握IoC容器和依赖注入基础 3. **Spring02** → 深入理解Bean作用域和配置方式 4. **Spring03** → 掌握FactoryBean和BeanPostProcessor 5. **SpringAOP** → 学习面向切面编程 ## 许可证 MIT License