作者:Mr_Precious
链接:https://www.cnblogs.com/scale-lai/p/10164634.html
序言
近期在工作中管理代码时发现,在项目中从Dao层到Service层数据传递中通过大量的get(),set()方法去一个一个的去拿值去赋值,导致代码篇幅过长,对此甚是讨厌,并且严重消耗开发时间。
起初找过些关于这块的资料,现在大部分都是Entity类和Dto类的属性名相同的前提下,利用反射实现,太局限了,如果要改成同名,按目前项目的程度去整改工作量太大,不现实。
后面看了Spring注解的实现,然后结合找到反射实现资料,突想奇发尝试着用自定义注解+反射方式的去实现,事实证明这方法是可行的。故分享至此,希望能帮到大家。
整体实现三步骤:
- 自定义注解
- 工具类方法实现反射
- 使用(测试)
1、自定义注解
import java.lang.annotation.*;@Target({ElementType.FIELD,ElementType.TYPE}) //Target 注解的使用域,FIELD表示使用在属性上面,TYPE表示使用在类上面@Retention(RetentionPolicy.RUNTIME) //Retention 设置注解的生命周期 ,这里定义为RetentionPolicy.RUNTIME 非常关键@Documentedpublic @interface RelMapper { //自定义属性 String value() default ""; String type() default ""; // value : status(标记属性值为Y/N的属性) / date(标记属性类型为时间) }
自定义属性,大家可以根据自己项目中的需求增加不同的属性。
2、工具类方法实现
import java.lang.reflect.Field;import java.lang.reflect.Method;import java.sql.Timestamp;import java.util.Date;import org.apache.commons.lang.StringUtils;import com.ctccbs.common.annotation.RelMapper;public class Relat