首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Spring中使用mapper接口中的@Autowired正确实例化类?

如何在Spring中使用mapper接口中的@Autowired正确实例化类?
EN

Stack Overflow用户
提问于 2021-09-09 15:22:08
回答 1查看 731关注 0票数 0

目前,我正在使用mapstruct来映射实体和do之间的数据,在映射器中,我需要使用@Autowired实例化一个类,在我需要实例化的类中,当我尝试执行以下操作时,我有一个将数据加载到缓存中的方法:@ Autowired存储库;IntelliJ告诉我:变量‘存储库’可能还没有初始化。如何正确地使用实例化类或使用所需的方法?

映射器

代码语言:javascript
运行
复制
@Service
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface DataMapper {

**@Autowired
RepositoryImpl repository;**

}

default DetailTemp mapDetail(String itemType, counter){

**ItemType itemType = repository.getType(itemType);**

DetailTemp detailTemp = new DetailTemp();
detailTemp.setPosition(counter);
detailTemp.setItemType(itemType);

return  DetailTemp;

}

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-09 16:19:39

根据,如果使用Spring组件(即@Autowired RepositoryImpl repository),则需要使用抽象类:

5.2。有时将Spring组件注入Mapper,我们需要在映射逻辑中使用其他Spring组件。在本例中,我们必须使用抽象类而不是接口

代码语言:javascript
运行
复制
 @Mapper(componentModel = "spring") public abstract class
 SimpleDestinationMapperUsingInjectedService 

然后,我们可以使用一个著名的@Autowired注释很容易地注入所需的组件,并在代码中使用它:

代码语言:javascript
运行
复制
 @Mapper(componentModel = "spring") public abstract class
 SimpleDestinationMapperUsingInjectedService {
 
     @Autowired
    protected SimpleService simpleService;
 
     @Mapping(target = "name", expression = "java(simpleService.enrichName(source.getName()))")
     public abstract SimpleDestination sourceToDestination(SimpleSource source); } 

我们必须记住不要让注入的bean成为私有的!这是因为MapStruct必须访问生成的实现类中的对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69120868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档