当前位置: 首页 > 知识库问答 >
问题:

Spring方面如何跨多个对象更新公共文件

戚奇略
2023-03-14

我正在编写一个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对象。

共有1个答案

秦俊发
2023-03-14

已编辑

可以使用java反射将基于对象的对象动态设置为实体字段。

1-遍历实体的字段。

  • 检查字段类型(必须等于BaseDto.class

2-将选中字段的可访问性设置为true。

3-将新BaseDto()设置为字段。

@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 ...
}
 类似资料:
  • 有一个应用程序需要像搜寻列表这样的东西。这个应用程序可以用不同的配置多次启动。有没有办法跨JVM共享数据结构。在JVM中是有效的。有一个数据库可以解决这个问题。但是,有没有更简单、更快速的方法?

  • 给定对象数组: 如何构造查询,以便在DB中更新每个文档的名称字段,其中文档的id等于数组对象中的\u id? 这必须在单个查询中完成。查询必须使用mongoDB节点驱动程序语法。 例如:

  • 我正在使用spring boot编写一个api,我希望将所有资源映射到一个公共基本路径(在本例中为/api)后面。但是,我不想为每个RestController类做注解(例如,通过使用@RequestMapping对其进行注解)。我想过以下解决方案,但它们都有我不想要的缺点: 创建一个基类(如ApiRestController)并让所有其他RestController继承这个类。这有一个缺点,即类

  • 标题中的问题。这里提出了一个类似的问题,当时唯一的解决办法是将项目发布到本地Maven存储库中。 这个问题在Android Studio 0.5中修复了吗(正如一些人所声称的)?在其发行说明中有一条声明说“支持模块内容根目录之外的源文件夹”。这是否意味着我们最终可以从项目文件夹外部导入库? 我试过文件- 编辑2:查看最新解决方案的接受答案(截至0.8。) 编辑: 我的项目目录结构只有一个模块,如下

  • 我有一个对诱惑者具有阅读权限的bucket,它工作正常,但是公共url链接需要很长时间才能更新:如果我将存储器中的图像更改为具有相同名称的另一个图像,bucket视图将显示正确的图像以及非公共图像url然而,公共url显示的是旧图像,更新需要很长时间。有人能解释一下这是正常的还是我做错了什么吗?

  • 我有一个程序,它有一个超级类,个人和子类,学生,并试图根据他们的生日和名字来比较他们什么时候是平等的。我做对了,但是在我试图解决的提示下,我得到了一个错误,自动评分器是:“测试学生和学生是一样的,即使成绩不同”,预期结果是真的,但我总是得到错误。这个程序在比较人和学生时起作用,在比较人和人时起作用,而不是学生和学生,我不知道为什么。 主要类别: 超类: 子类: