gpt4 book ai didi

java - @Service、@Repository 类对静态字段的依赖注入(inject)有利于静态方法的使用吗?

转载 作者:行者123 更新时间:2023-12-02 02:01:44 24 4
gpt4 key购买 nike

使用静态方法使代码更加简洁。所以我想使用静态方法,甚至与其中的 @Service、@Repository 类一起使用。通过代码你可以更容易理解。非常短,而且有效!!

但我想知道在任何情况下都可以使用。我以前没有看到过这样的代码,所以我担心它是可以使用的有效代码。如果您对此有任何想法,可以给我建议吗?

@Repository
public class TruckRepository {
public Integer selectWheelCount() {
//which is searching truck database to get some data about trucks.
//Such as how many wheels does the truck have, something like that.
}
}


@Component
public class CarFactory {
private static TruckRepository truckRepository;

//@Autowired << can be omitted after spring 4.3 as I know
NewsSourceFactory(TruckRepository truckRepository) {
this.truckRepository = truckRepository;
}

public static Integer getWheelCount(String carType) {
swtich(carType) {
case TRUCK:
return truckRepository.selectWheelCount();
}
}

}



@Component
public class SomeCode {
public void something() {
Integer count = CarFactory.getWheelCount("TRUCK");
}

}




添加评论

我对java中的“Duration.class”、“Stream.class”代码印象深刻。他们也使用静态方法,当然他们没有动态注入(inject)。如果考虑到代码的简洁性或清晰性,这难道不是静态方法的优点吗?真的无害吗?

最佳答案

您正在使用静态方法,该方法使用在构造函数中初始化的静态字段。在此代码中,甚至不清楚 Spring 何时会创建 CarFactory 的新实例(如果没有人引用它,也许根本不会)。如果没有创建 CarFactory 实例,您的静态方法也会被破坏,因为静态字段未初始化。

在您的情况下,我没有看到使用静态方法的任何好处,毕竟您始终可以将 CarFactory 实例注入(inject) SomeCode 中。

简单为:

@Autowired
private CarFactory cartFactory;

或者更好:

private CarFactory cartFactory;
public SomeCode(@Autowired CarFactory pCartFactory) {
cartFactory = pCartFactory;
}

关于java - @Service、@Repository 类对静态字段的依赖注入(inject)有利于静态方法的使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57371238/

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