Весной 3 не представляется возможным установить @Autowired либо в статических полях или методах, так, так как я хочу, чтобы объявить служебный класс, такие как:Util класса для экранной Услуги весной 3
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 называет один раз в конструктор и конструктор вызывается нигде, поэтому я объявил конструктор как частный.
Вам не хватает точки инъекции зависимостей, которая * является *, чтобы вводить службу везде, где это необходимо. То, что вы описываете, является шаблоном Locator Service, который является противоположным DI. Весна вам не поможет. – skaffman
@Juan: Это не концептуально «неправильно», это просто не то, как Весна что-то делает. Весна построена вокруг DI, и то, что вы описываете, не является DI. – skaffman
@skaffman Что вы думаете о решении, которое я разместил? Я понимаю, что вы говорите, но я хочу, чтобы класс util мог вызвать службу, инициализированную весной. Таким образом, оба вызова Сервиса, где это вводится, и вызовы службы через ServiceUtil обрабатываются одним и тем же экземпляром. – 2010-12-14 17:38:50