37

私はサーブレットで春の自動配線を使用したいので、ここに私のコードがあります:

@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 への参照が null です)。

4

2 に答える 2

77

次のリンクの解決策に従いましたが、正常に動作します: JBoss のサーブレットから Spring Bean にアクセスする

public class MyServlet extends HttpServlet {

  @Autowired
  private MyService myService;

  public void init(ServletConfig config) {
    super.init(config);
    SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
      config.getServletContext());
  }
}
于 2012-08-07T11:17:53.127 に答える
28

@Configurableサーブレットから注釈を削除し、以下を追加します。

SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (this);

init()メソッドの最初の行。

于 2012-08-07T11:14:40.107 に答える