14

私の Stripes アプリでは、次のクラスを定義します。

MyServletListener implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener {

  private SomeService someService;

  private AnotherService anotherService;

  // remaining implementation omitted
} 

このアプリのサービス レイヤーは、Spring を使用して、いくつかのサービス Bean を定義し、XML ファイルで結び付けます。SomeServiceとを実装する Bean を にAnotherService注入したいのMyServletListenerですが、これは可能ですか?

4

2 に答える 2

25

このようなものが機能するはずです:

public class MyServletListener implements ServletContextListener, HttpSessionAttributeListener, HttpSessionListener {
    @Autowired
    private SomeService someService;        
    @Autowired
    private AnotherService anotherService; 

    public void contextInitialized(ServletContextEvent sce) {
        WebApplicationContextUtils
            .getRequiredWebApplicationContext(sce.getServletContext())
            .getAutowireCapableBeanFactory()
            .autowireBean(this);
    }

    ...
}

リスナーは、Springの後に宣言する必要がありContextLoaderListenerますweb.xml

于 2011-04-01T09:04:06.020 に答える
12

少し短くて簡単なのは、SpringBeanAutowiringSupportクラスを使用することです。
あなたがしなければならないのはこれだけです:

SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);

したがって、axtavt の例を使用すると、次のようになります。

public class MyServletListener implements ServletContextListener, HttpSessionAttributeListener, HttpSessionListener {
    @Autowired
    private SomeService someService;        
    @Autowired
    private AnotherService anotherService; 

    public void contextInitialized(ServletContextEvent sce) {
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
    }

    ...
}
于 2013-10-30T13:25:40.590 に答える