使用带有@Autowired的Spring托管bean或使用具有静态方法的类?

时间:2019-04-05 10:10:56

标签: java spring

我有那个方法,它放在服务类中,但是我想将它移到另一个类中,例如实用程序类。然后,这是使用此方法的最佳方法:

Utils.check(first, second);

@Autowired
Utils utils;

utils.check(first, second);

方法:

public static <T> T check(T first, T second) {
    return first == null ? second : first;
}

2 个答案:

答案 0 :(得分:1)

Spring将为您的类生成一个代理,并可能将您的方法调用包装到一个事务中(因为它是public方法)。对于这种简单的方法而言,这将导致过多的重载,而这种情况不会利用任何自动装配的依赖项。坚持您的Util类,尽管您应该给事物起一个有意义的名称。

我建议使用Args类进行参数验证,其方法名称类似requireNonNullOrElse(T object, T objectIfNull),实际上与Optional.ofNullable(object).orElse(objectIfNull)相同。

答案 1 :(得分:1)

静态方法可能是更好的解决方案。 第一次使用此类时,此方法将被加载到内存中。因此您无法控制生命周期。

@Autowired解决方案在其他情况下将易于使用。例如: 1.如果要在单元测试中模拟此方法。 2.如果要通过spring范围控制生命周期。