Java Spring方面:如何跨多个对象更新公共字段

Java Spring方面:如何跨多个对象更新公共字段,java,spring,spring-boot,spring-aspects,Java,Spring,Spring Boot,Spring Aspects,我正在编写一个Spring方面,并寻找一种方法来更新返回对象上的字段 我的Dto @Getter @Setter @SuperBuilder @NoArgsConstructor @AllArgsConstructor public class BaseDto{ LocalDateTime testTime; } @Getter @Setter @SuperBuilder @NoArgsConstructor @AllArgsConstructor public class TestDt

我正在编写一个Spring方面,并寻找一种方法来更新返回对象上的字段

我的Dto

@Getter
@Setter
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class BaseDto{
   LocalDateTime testTime;
}

@Getter
@Setter
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class TestDto{
  private BaseDto baseDtol
}

@Getter
@Setter
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class SampleDto{
  private BaseDto baseDtol
}
我的朋友们:

@TestAnnotation
public TestDto covert(){
  return new TestDto()
}

@TestAnnotation
public SampleDto covert(){
  return new SampleDto()
}
方面:

@Aspect
@Component
public class TestAspect {
   @AfterReturning(value = "@annotation(TestAnnotation)", returning = "entity")
   public void test(JoinPoint joinPoint, Object entity){
      //Looking for a way to set BaseDto in the TestDto and SampleDto objects
   }
}

我的方面将从转换器类调用,返回的对象可以是SampleDto和TestDto。我正在寻找一种将BaseDto对象设置到其中的方法。

已编辑

您可以使用java反射
BaseDto
对象动态设置为
实体
字段

1-遍历
实体的字段

  • 检查字段类型(必须等于
    BaseDto.class
2-将选中字段的可访问性设置为
true

3-将
new BaseDto()设置为字段


已编辑

您可以使用java反射
BaseDto
对象动态设置为
实体
字段

1-遍历
实体的字段

  • 检查字段类型(必须等于
    BaseDto.class
2-将选中字段的可访问性设置为
true

3-将
new BaseDto()设置为字段


谢谢你看。我希望它是动态的,也就是说,只要我在另一个方法上添加@TestAnnotation,我就应该能够设置对象。哦,对不起,误解了,我会解决它的soon@JDev编辑后,我使用java反射动态设置实体字段,感谢您的关注。我希望它是动态的,也就是说,只要我在另一个方法上添加@TestAnnotation,我就应该能够设置对象。哦,对不起,误解了,我会解决它的soon@JDev编辑后,我使用java反射动态设置实体字段
@AfterReturning(pointcut = "servicePointCut()", returning = "entity")
public void afterReturningAdvice(JoinPoint joinPoint, Object entity) throws IllegalAccessException 

{

    //Iterate through fields of entity
    for (Field field : entity.getClass().getDeclaredFields()) {

        //Check type of field (equals to BaseDto.class)
        if (field.getType().equals(BaseDto.class)) {

            //Set accessibility of field to true
            field.setAccessible(true);
            
            //Set new BaseDto to entityobject
            BaseDto baseDto = new BaseDto();
            field.set(entity, baseDto);
        }
     
    }

 //Rest of afterReturningAdvice method ...
}