java 在@Service类的构造函数中自动配置Long

vsdwdz23  于 2023-02-28  发布在  Java
关注(0)|答案(2)|浏览(186)

对于Spring来说,这是一个全新的概念。我想创建一个代表汽车经销商的服务类。汽车经销商是有收入的。因此,我有一个名为totalRevenuelong字段,我想用它来示例化我的经销商。我有一个单独的@Repository注解类用于我的存储库。下面是我目前所拥有的内容的一个片段:

@Slf4j
@Data
@Service
public class DealershipServiceImpl implements DealershipService {

  private long totalRevenue;
  private final CarRepository carRepository;

  public DealershipServiceImpl(@Value("#{ 1000000L }")Long initialRevenue, CarRepository carRepository) {
    this.totalRevenue = initialRevenue;
    this.carRepository = carRepository;
  }
.
.
.

我使用基于[this (rather old) post][1]信息的@Value注解,但是IntelliJ似乎不喜欢它,将鼠标悬停在变量上显示“Could not autowire...”,如您所见:

而它似乎也不喜欢我使用@Value

如何在构造函数中注入一个默认值?我希望在构造函数中提供Long字段,这样我就可以通过Junit测试有效地测试类。

9vw9lbht

9vw9lbht1#

您可以使用@Value注解来设置totalRevenue的初始值。

@Slf4j
@Service
public class DealershipServiceImpl implements DealershipService {

    private Long totalRevenue;

    private final CarRepository carRepository;

    public DealershipService(
            @Value("${initialRevenue:20000}") Long initialRevenue, 
            CarRepository carRepository) {
        this.totalRevenue = initialRevenue;
        this.carRepository = carRepository;
    }

    ...
}

并将此属性放在application.properties(或应用程序.yml)中:

initialRevenue = 100000

此外,如果不添加此属性,则将应用默认值(20000)。
P.S. @来自包org.springframework.beans.factory.annotation的值注解。不要与类似的Lombok注解混淆
希望对你有帮助)

mqkwyuun

mqkwyuun2#

不需要在application.properties中定义initialRevenue,直接在@Value中指定值,不需要#{},系统会自动转换为正确的数据类型:

@Service
public class DealershipServiceImpl implements DealershipService {

  private long totalRevenue;
  private final CarRepository carRepository;

  @Autowired
  public DealershipServiceImpl(@Value("1000000")Long initialRevenue, CarRepository carRepository) {
    this.totalRevenue = initialRevenue;
    this.carRepository = carRepository;
  }

}

相关问题