Util класс для доступа к Сервису в Spring 3 - PullRequest
1 голос
/ 14 декабря 2010

В Spring 3 невозможно установить @Autowired в статических полях или методах, поэтому я хочу объявить служебный класс, такой как:

public class SchoolYearServiceUtil {
    private static SchoolYearService schoolYearService;

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

, чтобы избежать необходимости везде внедрять schoolYearService.(JSP, командный класс ...), в котором мне это нужно.В этом случае мне не нужен интерфейс, который будет реализован 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 вызывает один раз, когда конструктор и конструктор не называются нигде больше, поэтому я объявил конструктор как приватный.

1 Ответ

1 голос
/ 14 декабря 2010

Я полностью поддерживаю комментарий Скаффмана.Вам не нужно static поля с DI.Вы просто определяете компонент синглтона области действия (по умолчанию).

Существует способ получить компонент статически, но вы должны знать, что его нельзя использовать в обычных ситуациях.(есть несколько действительных приложений).Вы должны использовать WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext)

. Вы заметили, что вам нужно передать аргумент ServletContext.

...