Nie można Autowire ServletContext


Jestem nowy w Spring i próbuję użyć adnotacji @Autowire w ServletContext z moim atrybutem klasy:
@Controller
public class ServicesImpl implements Services{ @Autowired
ServletContext context;

Zdefiniowałem komponent bean dla tej klasy w moim pliku dispatcher-servlet.xml:
<bean id="services" class="com.xxx.yyy.ServicesImpl"/>

Ale kiedy próbuję uruchomić test JUnit, generuje następujący błąd:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [javax.servlet.ServletContext] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

Myślałem, że wtrysk ServletContext jest automatyczny od wiosny ... Jak mogę rozwiązać ten problem?
Podziękować!
EDYCJA: Chcę użyć servletContext do wywołania metody getRealPath (). Czy jest jakaś alternatywa?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zaimplementuj interfejs ServletContextAware, a Spring wprowadzi go za Ciebie
@Controller
public class ServicesImpl implements Services, ServletContextAware{
private ServletContext context;public void setServletContext(ServletContext servletContext) {
this.context = servletContext;
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Prawdopodobnie chcesz rzucić okiem na MockServletContext

,
http://static.springsource.org ... .html
które mogą być używane w testach jednostkowych.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

ServletContext
nie jest Spring Bob, więc nie może zostać wstrzyknięty, chyba że zaimplementujesz
ServletContextAware
http://static.springsource.org ... .html
.
Jeśli ktoś myśli w modułach lub warstwach, to kontekst serwletu nie powinien być dostępny poza modułem/warstwą WWW. Zakładam, że Twój
ServicesImpl
jest częścią warstwy biznesowej lub usługowej.
Gdybyś mógł podać trochę więcej kontekstu, moglibyśmy zaproponować lepsze alternatywy.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się