# bean-transfer
**Repository Path**: jjjxxx/bean-transfer
## Basic Information
- **Project Name**: bean-transfer
- **Description**: 基于配置文件实现属性复制,基于SPEL,支持复杂表达式。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-19
- **Last Updated**: 2026-02-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Bean Transfer 完整使用指南
## 目录
- [一、项目介绍](#一项目介绍)
- [二、核心特性](#二核心特性)
- [三、项目架构](#三项目架构)
- [四、快速开始](#四快速开始)
- [五、配置说明](#五配置说明)
- [六、使用指南](#六使用指南)
- [七、实战案例](#七实战案例)
- [八、最佳实践](#八最佳实践)
- [九、高级功能](#九高级功能)
- [十、常见问题](#十常见问题)
---
## 一、项目介绍
### 1.1 项目概述
Bean Transfer 是一个基于 XML 配置的对象到对象映射工具,专为复杂报文转换场景设计。该框架通过声明式的 XML 配置实现对象映射,无需修改实体类即可完成复杂的转换逻辑。
**适用场景:**
- 报文转换(如 HTTP 请求/响应转换)
- 异构系统之间的数据对接
- 需要频繁变化的字段映射关系
- 跨层级、嵌套对象的复杂映射
**不适用场景:**
- 简单的 Bean 属性复制(推荐使用 BeanUtils、MapStruct 等工具)
- 性能敏感的场景(反射机制有一定性能开销)
### 1.2 项目信息
- **项目名称**:bean-transfer
- **组织**:com.hongri
- **当前版本**:2.0.2-SNAPSHOT
- **Java 版本**:JDK 8+
- **Spring Boot 版本**:2.7.18
- **开源协议**:需查看 LICENSE 文件
---
## 二、核心特性
### 2.1 主要功能
✅ **XML 配置驱动**:通过 XML 文件定义映射规则,零侵入实体类
✅ **复杂的路径解析**:支持 SpEL 表达式、多层嵌套路径访问
✅ **上下文变量**:支持 `current` 和 `_` 上下文对象,实现跨层级访问
✅ **灵活的值处理**:支持固定值、变量引用、SpEL 表达式
✅ **自定义转换器**:提供扩展点,支持自定义转换逻辑
✅ **Spring 集成**:提供 Spring Boot Starter,开箱即用
✅ **类型安全**:支持类型转换和验证
✅ **集合映射**:支持数组、List、Set 等集合类型的映射
### 2.2 技术优势
| 特性 | 说明 |
|------|------|
| **零侵入** | 实体类无需添加任何注解或继承 |
| **配置集中** | 所有映射规则集中在 XML 文件中,便于维护 |
| **灵活扩展** | 支持自定义转换器、自定义函数 |
| **性能优化** | 使用 ReflectASM 优化反射性能 |
| **Spring 原生** | 深度集成 Spring 生态 |
| **类型安全** | 提供类型转换器机制 |
---
## 三、项目架构
### 3.1 模块结构
```
bean-transfer (父工程)
├── bean-transfer-core # 核心模块
│ ├── converter/ # 类型转换器
│ ├── core/ # 核心实现类
│ ├── definition/ # 映射定义
│ ├── property/ # 属性处理
│ ├── schema/ # XML Schema
│ └── util/ # 工具类
├── bean-transfer-spring # Spring 集成模块
│ └── spring/ # Spring 适配器
├── bean-transfer-starter # Spring Boot Starter
│ └── spring/config/ # 自动配置
└── bean-transfer-config-generator # 配置生成器
└── generator/ # 配置生成工具
```
### 3.2 核心类说明
| 类名 | 说明 |
|------|------|
| `ObjectTransfer` | 对象转换接口 |
| `ConfigurationObjectTransfer` | 基于配置的对象转换实现 |
| `MappingConfiguration` | 映射配置实体 |
| `BeanCopierConfiguration` | 全局配置 |
| `XmlMappingConfigurationParser` | XML 配置解析器 |
| `ConfigurationObjectTransferBuilder` | 转换器构建器 |
### 3.3 依赖关系图
```
应用层
↓
bean-transfer-starter
↓
bean-transfer-spring
↓
bean-transfer-core
↓
dom4j, jackson, reflectasm, spring-context
```
---
## 四、快速开始
### 4.1 Maven 依赖
#### Spring Boot 项目(推荐)
```xml
com.hongri
bean-transfer-starter
2.0.2-SNAPSHOT
```
#### 普通 Spring 项目
```xml
com.hongri
bean-transfer-spring
2.0.2-SNAPSHOT
```
#### 独立使用
```xml
com.hongri
bean-transfer-core
2.0.2-SNAPSHOT
```
### 4.2 配置文件位置
默认情况下,框架会从 `classpath:mappingConfiguration/` 目录下加载 XML 配置文件。
可以通过以下方式自定义配置文件位置:
```java
@Configuration
public class CustomLoaderConfig {
@Bean
public MappingConfigurationLoader mappingConfigurationLoader(
MappingConfigurationParser parser) {
// 自定义配置文件路径
List basePackages = Arrays.asList(
"mappingConfiguration",
"customMappingConfig"
);
return new XmlMappingConfigurationLoader(parser, basePackages);
}
@Bean
public MappingConfigurationFactory mappingConfigurationFactory(
MappingConfigurationLoader loader) throws Exception {
DefaultMappingConfigurationFactory factory =
new DefaultMappingConfigurationFactory(loader);
factory.loadConfiguration(); // 加载所有配置
return factory;
}
}
```
### 4.3 Hello World 示例
#### 步骤 1:定义实体类
```java
// 源对象
public class UserDTO {
private String userName;
private Integer userAge;
private String userAddress;
// getters and setters
}
// 目标对象
public class UserVO {
private String name;
private Integer age;
private String address;
// getters and setters
}
```
#### 步骤 2:创建映射配置
将以下内容保存到 `src/main/resources/mappingConfiguration/user-mapping.xml`:
```xml
```
#### 步骤 3:使用转换器
```java
@Autowired
private ConfigurationObjectTransferBuilder transferBuilder;
public UserVO convertUser(UserDTO dto) {
ObjectTransfer