1

在 Spring 3 中,无法在静态字段或方法中设置 @Autowired,因此我想声明一个实用程序类,例如:

public class SchoolYearServiceUtil {
    private static SchoolYearService schoolYearService;

    public static SchoolYear getSchoolYear(Long id) {
        return schoolYearService.get(id);
    }
}

避免必须在我需要它的任何地方(jsp,命令类...)注入 schoolYearService。在这种情况下,我不需要 SchoolYearServiceUtil 实现的接口。

我不想通过代码初始化对象,而是获得与 Spring 相同的实例。

哪个是将 getSchoolYear 实现为静态方法的最佳选择?

谢谢。

这在概念上会是错误的吗?:

@Component
public class SchoolYearServiceUtil {

private static SchoolYearService schoolYearService;

@Autowired(required = true)
private SchoolYearServiceUtil(@Qualifier("schoolYearServiceImpl") SchoolYearService schoolYearService) {
    SchoolYearServiceUtil.schoolYearService = schoolYearService;
}

public static SchoolYearService getSchoolYearService() {
    return schoolYearService;
}

public static SchoolYear getSchoolYear(Long id) {

    return getSchoolYearService().get(id);
}
}

我必须确保只有 Spring 调用一次构造函数并且构造函数在其他任何地方都没有调用,这就是我将构造函数声明为私有的原因。

4

1 回答 1

1

我完全支持斯卡夫曼的评论。您不需要static带有 DI 的字段。您只需定义一个范围为单例的 bean(默认)。

有一种静态获取 bean 的方法,但您应该知道它不能在常规情况下使用。(有一些有效的应用程序)。它是使用WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext)

你注意到你需要传递一个ServletContext参数。

于 2010-12-14T17:21:24.707 回答