1

I've created some mapstruct mapper annotated with spring constructor injection. I know in the test I can autowire the mapper with springboottest, but it seems very heavy and the loading speed is very slow. Can I get the mapper without initializing the spring context? Is this good practice?

LunaticJape
  • 1,446
  • 4
  • 21
  • 39

1 Answers1

1

You can always get a mapper by means of Mappers.getMapper(MapperClass.class). However, the problem arises when that mapper uses other mappers.

When using other mappers (@Mapper.uses) you might also want to use (@Mapper.injectionStrategy) and use constructor injection. Since mappers are stateless by design, you could write some reflective code yourself to construct a mapper with all its dependent uses mappers.

Sjaak
  • 3,602
  • 17
  • 29
  • Do you mean I have to instantiate manually the mapper including any injection chain? – LunaticJape Apr 28 '20 at 14:52
  • Yes. If you don't use frameworks during test to arrange injection, you need to use reflection (that is also what `Mappers.getMapper` does. I would recommend to do this only in unit test. For testing, checkout https://stackoverflow.com/questions/61398218/how-to-efficiently-test-mapstruct-spring-mapper as well. – Sjaak Apr 28 '20 at 18:48
  • oops.. Sorry, wrong stuff under my paste button.. Here's the proper link: https://stackoverflow.com/questions/60986556/how-to-tests-and-mock-mapstruct-converter – Sjaak Apr 28 '20 at 19:41