Не удается Autowire ServletContext
Я новичок в Spring, и я пытаюсь использовать аннотацию @Autowire для ServletContext с моим атрибутом class:
@Controller
public class ServicesImpl implements Services{
@Autowired
ServletContext context;
Я определил bean для этого класса в моем диспетчере-servlet.xml:
<bean id="services" class="com.xxx.yyy.ServicesImpl" />
Но когда я пытаюсь запустить JUnit-тест, он дает следующую ошибку:
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)}
Я думал, что инъекция ServletContext была автоматической с помощью spring... Как я могу это решить?
Спасибо!
EDIT: я хочу использовать servletContext для вызова метода getRealPath(). Есть ли альтернатива?
Ответы
Ответ 1
Внедрите ServletContextAware интерфейс и Spring введет его для вас
@Controller
public class ServicesImpl implements Services, ServletContextAware{
private ServletContext context;
public void setServletContext(ServletContext servletContext) {
this.context = servletContext;
}
Ответ 2
Вероятно, вы захотите взглянуть на MockServletContext, который можно использовать в модульных тестах.
Ответ 3
ServletContext
не является Spring bean, и поэтому его нельзя вводить, если вы не реализуете ServletContextAware
.
Если кто-то думает в модулях или слоях, контекст сервлета не должен быть доступен вне веб-модуля/уровня. Я полагаю, что ваш ServicesImpl
является частью бизнес-уровня или уровня сервиса.
Если вы дадите немного больше контекста, мы сможем предложить лучшие альтернативы.