При использовании BeanUtils.copyProperties из объекта, созданного Mybatis, к бобу Spring, в бине Spring свойства равны нулю. Почему? - PullRequest
0 голосов
/ 09 апреля 2020

Проблема, с которой я сталкиваюсь, состоит в том, что у меня есть класс, который выглядит примерно так Объект моего бина Spring в другом классе, например:

public class MyClass {

      TableModel model

      @Autowired
      MyClass(TableModel model) {
           this.model = model;
           //...
      }

      //some code

      TableModel result = MyMapperInterface.selectFromTable();
      //Here, result.tableField1 is not 0 or null

      BeanUtils.copyProperties(result, model);

      //After copyProperties(), model.tableField1 is still null
      //...     

}

Однако после вызова BeanUtils.copyProperties() свойства в model по-прежнему равны нулю. Я дважды проверил, и я не использую версию copyProperties Apache Commons, я использую версию BeanUtils для Spring. В чем проблема?

1 Ответ

1 голос
/ 09 апреля 2020

@RequestScope означает, что вы получаете разные экземпляры для каждого запроса. Семантически это не совпадает с передачей его в качестве параметра конструктора (что означает, что он является общим для всех пользователей этого компонента).

Даже в этом случае Spring попытается сделать это для вас, внедрив прокси . для вашего TableModel, который волшебным образом переключит его в зависимости от контекста запроса. Вероятно, случается так, что ваш базовый экземпляр не тот. Не используйте инъекцию для данных по запросу; вместо этого используйте параметры метода. (И я предлагаю использовать MapStruct вместо BeanUtils, так как он быстрее и безопаснее.)

...