Mapperのコンポーネントモデルを指定することができる。
今回はSpring FrameworkでDIできるようにする。
環境
@Mapper
のcomponentModel属性を使う
@Mapper
のcomponentModel属性に spring
を指定する。
@Mapper(componentModel = "spring") public interface SpringMapper { Person toPerson(PersonEntity entity); }
これでMapperを生成すると @Component
が付与されたMapperが生成される。
import org.springframework.stereotype.Component; /* @Generated( value = "org.mapstruct.ap.MappingProcessor", date = "2018-03-07T22:13:08+0900", comments = "version: 1.2.0.Final, compiler: javac, environment: Java 9.0.1 (Oracle Corporation)" ) */ @Component public class SpringMapperImpl implements SpringMapper { @Override public Person toPerson(PersonEntity entity) { if ( entity == null ) { return null; } Person person = new Person(); person.setName( entity.getName() ); person.setAge( entity.getAge() ); return person; } }
mapstruct.defaultComponentModelオプションを使う
@Mapper
でコンポーネントモデルを毎回指定するのは面倒なので、注釈処理にmapstruct.defaultComponentModelオプションを指定して一律設定することができる。
今回はGradleを使った場合。
... compileJava { options.compilerArgs = [ '-Amapstruct.defaultComponentModel=spring' ] } ...
@MapperConfig
を使う
MapperConfigクラスを使ってコンポーネントモデルを指定することもできる。
@MapperConfig(componentModel = "spring") public interface SpringConfig { }
作成したMapperConfigクラスをMapperに指定する。
@Mapper(config = SpringConfig.class) public interface SpringMapper { Person toPerson(PersonEntity entity); }