Подтвердить что ты не робот

Автоувеличивание в сервлете

Я хочу использовать spring autowiring в сервлете, поэтому здесь мой код:

@Configurable
public class ImageServlet extends HttpServlet {

   @Autowired
   private SystemPropertyDao systemPropertyDao;

   @Override
   public void init() throws ServletException {


   String imagePath = systemPropertyDao.findByID(StaticParam.CONTENT_FOLDER);

}

а SystemPropertyDao аннотируется с помощью @Repository

и мой applicationContext.xml:

<context:component-scan base-package="com.basepackage" />
<mvc:annotation-driven />
<context:annotation-config />
<context:spring-configured/>

web.xml

  <servlet>
    <servlet-name>imageServlet</servlet-name>
    <servlet-class>com.xeno.basepackage.ImageServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>imageServlet</servlet-name>
    <url-pattern>/myimages/*</url-pattern>
  </servlet-mapping>

иногда автоустановка работает, а иногда и нет (ссылка на spring bean systemPropertyDao равна нулю), может ли кто-нибудь сказать мне, если я что-то упустил?

4b9b3361

Ответ 1

Я следил за решением в следующей ссылке, и он отлично работает: Доступ Spring beans из сервлета в JBoss

public class MyServlet extends HttpServlet {

  @Autowired
  private MyService myService;

  public void init(ServletConfig config) {
    super.init(config);
    SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
      config.getServletContext());
  }
}

Ответ 2

Удалите аннотацию @Configurable из вашего сервлета и добавьте:

SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (this);

в первой строке вашего метода init().