Я использую Jersey 1.4 ea вместе с Spring 3.0 и интеграцией jersey-spring
. Интеграция Джерси и Спринг отлично работает для классов ресурсов, как описано здесь .
Как бы то ни было, я хочу добавить пружинный компонент в ContainerRequestFilter , чтобы выполнить некоторую предварительную обработку запросов.
@Component
public class SecurityFilter implements ContainerRequestFilter {
// UserManager is a declared spring component
// Injecting it should work somehow
@Autowired
private UserManager userManager;
@Override
public ContainerRequest filter(ContainerRequest request) {
System.out.println(userManager);
// prints out null on request
}
}
Фильтр и bean-компонент user manager регистрируются при развертывании приложения в Glassfish. Интересно, что я делаю не так? Есть ли способ внедрить управляемый пружиной bean-компонент в ContainerRequestFilter?
UPDATE
Вид решен. Проблема заключается в том, что Jersey не получает бины Spring, если эти бины являются прокси-серверами Java (в отличие от сгенерированных прокси-классов). Эту проблему можно решить, дав команду Spring ВСЕГДА использовать прокси-классы вместо Java Proxies, указав атрибут proxy-target-class="true"
в соответствующих частях конфигурации Spring. В моем сценарии я должен был указать это на <tx:annotation-driven proxy-target-class="true" />
.
См. здесь для более подробного анализа и возможного исправления этого.