# 配置说明

## 目标类配置说明

因为每个类均可能拷贝到多个目标，例如：FooDto可能会拷贝到Foo，也可能拷贝到FooVo等。并且拷贝到不同目标时需要的映射配置一般来说是有差异的。

从2.3.0版本开始，所有的映射类注解（`@Mapping`/`@DictMapping`/`@Nested`）均支持目标类的配置（`targetClass`/`targetClassName`），用于区分此注解配置的作用目标，防止拷贝时发生意外的处理。

以`@Mapping`注解为例：

### 示例1

```java
class A {
   @Mapping(targetClass=B.class, field="b")
   @Mapping(targetClass=C.class, field="c")
   String a;
}
```

* A和B类的实例互相拷贝时，A.a映射字段为B.b
* A和C类的实例互相拷贝时，A.a映射字段为C.c
* A和D类（所有其他的类）的实例互相拷贝时，A.a映射字段为D.a

### 示例2

```java
class A {
   @Mapping(targetClass=B.class, field="b")
   @Mapping(targetClass=C.class, field="c")
   @Mapping(field="d")
   String a;
}
```

* A和B类的实例互相拷贝时，A.a映射字段为B.b
* A和C类的实例互相拷贝时，A.a映射字段为C.c
* A和D类（所有其他的类）的实例互相拷贝时，A.a映射字段为D.d

{% hint style="info" %}
不配置`targetClass`表示通用配置，`BeanUtils`在拷贝时会选取第一个匹配的注解，所以通用配置必须放在最后。
{% endhint %}

## 类（Class）类型的属性配置说明

某些情况下参与拷贝的类（如DTO）可能需要单独打包供其他系统使用，此时如果注解中有`Class`类型的属性，可能会因为和其他类的耦合导致打包失败（或者打包内容中包含各种不需要的类）。

从2.3.0版本开始，所有的映射类注解（`@Mapping`/`@DictMapping`/`@Nested`）中类型为`Class`的属性配置，均提供对应的className（类的全路径名）配置，用于避免和系统中其他类的耦合问题。

以`@DictMapping`注解为例：

### 修改前

```java
package demo;

class A {
   @DictMapping(targetClass=B.class, key="", resolver=MyResolver.class)
   String a;
}
```

* A和B类的实例互相拷贝时，A.a和映射字段B.a采用MyResolver类处理字典映射
* A和C类（所有其他的类）的实例互相拷贝时，A.a和映射字段C.a原样拷贝（不使用配置的字典映射）

### 修改后

```java
package demo;

class A {
   @DictMapping(targetClassName="demo.B", key="", resolverClassName="demo.MyResolver")
   String a;
}
```

修改前后的效果是相同的。

{% hint style="info" %}
className属性配置的优先级高于class属性的优先级。
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ankang.gitbook.io/commons/commons-beans/ru-men/gai-nian/pei-zhi-shuo-ming.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
