• Java并发编程
  • JVM
  • JMX
  • Java数据结构与算法
  • 动态字节码生成技术
  • 常用工具
  • 2.0 @Mapper注解详解

    2016-06-10 21:24:16 95,349 2

    在上一节中,我们已经看到了MapStruct可以帮助我们自动根据一个添加@Mapper注解的接口生成一个实现类,在上一节的案例中,自动生成的是CarMapperImpl.class,而且我们也已经通过IDE的反编译功能查看了其ob欧宝娱乐app下载。

    本节我们将会对@Mapper注解进行一些讲解。

    1、@Mapper注解的componentModel属性

    componentModel属性用于指定自动生成的接口实现类的组件类型。这个属性支持四个值:

    default: 这是默认的情况,mapstruct不使用任何组件类型, 可以通过Mappers.getMapper(Class)方式获取自动生成的实例对象。

    cdi: the generated mapper is an application-scoped CDI bean and can be retrieved via @Inject

    spring: 生成的实现类上面会自动添加一个@Component注解,可以通过Spring的 @Autowired方式进行注入

    jsr330: 生成的实现类上会添加@javax.inject.Named 和@Singleton注解,可以通过 @Inject注解获取。


    我们以spring组件方式进行验证,将上一节的CarMapper接口上@Mapper注解添加componentModel属性,如下:

    //设置组件模型为Spring
    @Mapper(componentModel = "spring")
    public interface CarMapper {
    
        CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );
    
        @Mapping(source = "numberOfSeats", target = "seatCount")
        CarDto carToCarDto(Car car);
    }

    需要注意的是,当指定组件模型为Spring的时候,我们在classpath下一定要引入spring的jar包,否则MapStruct在编译的时候会报错。

    现在再次执行"mvn compile",通过IDE反编译功能查看自动生成的Mapper实现类ob欧宝娱乐app下载。

    QQ截图20160610212311.png

    可以看到自动生成的实现类中,自动帮我们添加了@Component注解。因此我们在其他地方可以通过@AutoWired的方式自动注入。