gpt4 book ai didi

java - Spring - 如何正确使用@Autowired?

转载 作者:行者123 更新时间:2023-12-01 17:46:22 25 4
gpt4 key购买 nike

我在 Spring 应用程序中发现了奇怪的行为。

实体的@autowired并不总是有效。

我使用Elide用于构建 JSONAPI 和一些自定义 Controller 的项目。

在一个 Controller 中,实体的一个 @Autowrited 保持为 null,但从 Elide 调用时它可以正常工作。

Controller :

@RestController
public class UploadController {
@Autowired
private ProjectRepository projectRepository;

@PostMapping(value = "/api/projects/{projectId}/upload")
public String uploadItem(@PathVariable long projectId, @RequestParam("file") MultipartFile file,
@RequestParam("projectName") String projectName,
RedirectAttributes redirectAttributes) throws IOException {
Project project = projectRepository.findOneByProjectIdAndName(projectId, projectName);
Integer result = project.getNumberOfItems();

return "";
}
}

实体

@Setter
@NoArgsConstructor
@Table(name = "projects")
@Entity
@Include(rootLevel = true, type = "projects")
public class Project extends DiffShelfBase {

@Autowired
@Transient
private ItemRepository itemRepository;

@Transient
@ComputedAttribute
public Integer getNumberOfItems() {
return itemRepository.countByProjectId(this.getId());
}
}

存储库

@Repository
@Transactional
public interface ItemRepository extends JpaRepository<Item, Long> {
Integer countByProjectId(long projectId);
}

配置

@Configuration
@EnableSpringConfigured
public class MyConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("*")
.allowedOrigins("http://localhost:4200");
}
};
}
}

我不明白为什么,但 Project.getNumberOfItems 中的 itemRepository 为 null。

最佳答案

这不是你应该这样做的方式。不要在实体中使用@Autowired。该注释由 Spring 管理,但您的实体由 Hibernate 管理和创建,并且它不关心 Spring 注释。您可以找到另一种方法将此属性添加到您的实体(例如,让它成为数据库中的字段)。

关于java - Spring - 如何正确使用@Autowired?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54727566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com