我编写了所需的带有注释的接口和作为装饰器的抽象类。生成(mvn清理包)后,通过“默认”过程更新修饰的函数,得到的是参数和结果类型。我不知道,有什么问题。你能帮帮我吗?
环境:mapstruct版本1.4.2。lombok最终版本1.18.22(Spring boot 2.6.3)lombok mapstruct绑定:0.2.0
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>${lombok-mapstruct-binding.version}</version>
</dependency>
和
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
</exclude>
<exclude>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>${lombok-mapstruct-binding.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
<compilerArgs>
<compilerArg>-Amapstruct.defaultComponentModel=spring</compilerArg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
Mapper接口声明:
@Mapper(componentModel = "spring", uses = {DateMapper.class})
@DecoratedWith(BeerMapperDecorator.class)
public interface BeerMapper
{
BeerMapper INSTANCE = Mappers.getMapper(BeerMapper.class);
BeerDto beerToBeerDto(Beer beer);
Beer beerDtoToBeer(BeerDto beerDto);
BeerDto beerToBeerDtoWithInventory(Beer beer);
}
装饰师:
public abstract class BeerMapperDecorator implements BeerMapper {
@Autowired
@Qualifier("delegate")
private BeerMapper delegate;
private BeerInventoryService beerInventoryService;
@Autowired
public void setBeerInventoryService(BeerInventoryService beerInventoryService) {
this.beerInventoryService = beerInventoryService;
}
@Override
public BeerDto beerToBeerDtoWithInventory(Beer beer) {
BeerDto dto = delegate.beerToBeerDto(beer);
dto.setQuantityOnHand(beerInventoryService.getOnhandInventory(beer.getId()));
System.out.println(" ----------- Decorated --------------");
return dto;
}
}
以及生成的源:
@Override
public BeerDto beerToBeerDtoWithInventory(Beer beer) {
if ( beer == null ) {
return null;
}
BeerDtoBuilder beerDto = BeerDto.builder();
beerDto.id( beer.getId() );
if ( beer.getVersion() != null ) {
beerDto.version( beer.getVersion().intValue() );
}
beerDto.createdDate( dateMapper.asOffsetDateTime( beer.getCreatedDate() ) );
beerDto.lastModifiedDate( dateMapper.asOffsetDateTime( beer.getLastModifiedDate() ) );
beerDto.beerName( beer.getBeerName() );
beerDto.upc( beer.getUpc() );
beerDto.price( beer.getPrice() );
return beerDto.build();
}
检查BeerMapperDecorator
的实现,此类被标记为主注入依赖项。
应该看起来像这样:
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2022-03-01T20:17:02+0100",
comments = "version: 1.5.0.Beta2, compiler: Eclipse JDT (IDE) 1.4.50.v20210914-1429, environment: Java 17.0.1 (Azul Systems, Inc.)"
)
@Component
@Primary
public class BeerMapperImpl extends BeerMapperDecorator {
@Autowired
@Qualifier("delegate")
private BeerMapper delegate;
@Override
public BeerDto beerToBeerDto(Beer beer) {
return delegate.beerToBeerDto( beer );
}
@Override
public Beer beerDtoToBeer(BeerDto beerDto) {
return delegate.beerDtoToBeer( beerDto );
}
}
您正在查看的接口被标记为委托接口:
@Component
@Qualifier("delegate")
public class BeerMapperImpl_ implements BeerMapper {
我正在根据参考指南学习使用Map结构。日食验证是 面向Web开发人员的Eclipse Java EE IDE。版本:开普勒服务版本2 pom。xml如下所示,与参考指南相同 它表示在构建项目时将生成实现代码。但是,它似乎不会在目标/生成的源文件夹下生成
更新2017-05-17。我不再为这个问题产生的公司工作,也没有访问Delphi XEX的权限。当我在那里的时候,这个问题通过迁移到混合的FPC+GCC(Pascal+C)得到了解决,在一些例程中使用了霓虹灯的固有特性,在那里它起到了很大的作用。(强烈推荐使用FPC+GCC,因为它支持使用标准工具,特别是Valgrind。)如果有人能用可信的例子来演示他们是如何从Delphi XEx中生成优化的A
大多数Blockly应用程序需要将块转换为代码以执行。本页描述如何将代码生成器添加到自定义块。 首先,转到generators/目录并选择与您要生成的语言(JavaScript,Python,PHP,Lua,Dart等)相对应的子目录。假设您的代码块不适合现有类别,请创建一个新的JavaScript文件。这个新的JavaScript文件需要包含在<script ...>编辑器的HTML文件中的标记
Jboot 内置了一个简易的代码生成器,可以用来生成model层和Service层的基础代码,在生成代码之前,请先配置jboot.properties关于数据库相关的配置信息,Jboot 代码生成器会通过该配置去链接数据库。 jboot.datasource.type=mysql jboot.datasource.url=jdbc:mysql://127.0.0.1:3306/jbootdemo
遵照此规范,在实际操作中,有许多重复。接下来推荐一款专为本规范量身定做的代码生成器 Laravel 5.x Scaffold Generator。 本扩展支持 5.1 ~ 5.5 版本的 Laravel。 只需要一个命令: 即可生成: $ php artisan make:scaffold Projects --schema="name:string:index,description:text:
注: 内容来自官网资料 Java Generated Code 这个页面准确描述 protocol buffer 编译器为任何给定协议定义生成的java代码。proto2和proto3生成的代码之间的任何不同都将被高亮 - 注意在这份文档中描述的是这些生成代码的不同,而不是基本的消息类/接口,后者在两个版本中是相同的。在阅读这份文档之前你应该先阅读 proto2语言指南 和/或 proto3语言指