@Mapper注解详解

在上一节中,我们已经看到了MapStruct可以帮助我们自动根据一个添加@Mapper注解的接口生成一个实现类,在上一节的案例中,自动生成的是CarMapperImpl.class,而且我们也已经通过IDE的反编译功能查看了其源码。
本节我们将会对@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实现类源码。
在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值