球衣:1.12 春:3.11 JDK:1.6.0_35 的Tomcat:6..0.33新澤西;:通過SpringServlet註冊注入ExceptionMapper實例
我試圖註冊被實例化的Jersey servlet外ExceptionMapper實例通過SpringServlet上下文中的Spring IoC容器,並且正在運行在Jersey servlet初始化期間,「組件類X的範圍必須是單例」異常。我現在無法發佈實際的代碼,所以我將給出實現的基本知識,以查看某人是否明顯突然出現某種情況,或者如果我可以指出某些文檔是我擁有的錯過。
的ExceptionMapper實例基本上如下:
// ... package definitions omitted ...
@Provider
@Singleton
public class MyExceptionMapper
implements ExceptionMapper<MyException>
{
// ... injected attributes omitted ...
@Override
public Response toResponse(MyException exception)
{
// ... specific handling logic omitted ...
return Response.status(Status.BAD_REQUEST).entity(exception.getMessage()).build();
}
}
在applicationContext.xml中的豆的定義如下,獨居缺省範圍(並添加顯式說明符範圍似乎不改變行爲):
<bean id="myExceptionMapper" class="my.package.MyExceptionMapper" />
Spring上下文加載器監聽器和在web.xml SpringServlet配置基本上是樣板,並且servlet將加載,初始化,並與其他注入正常運行屬性,當豆defin MyExceptionMapper的ition被註釋掉了applicationContext.xml。但是,當bean定義出現在applicationContext.xml中,我得到消息記錄到的效果:我試圖把MyExceptionMapper在掃描包的層次結構由SpringServlet初始化過程中拿起
SpringProviderFactory - Registering Spring bean, myExpectionMapper, of type my.package.MyExceptionMapper as a provider class
SpringProviderFactory - Registering Spring bean, myServiceController, of type my.package.MyServiceController as a root resource class
... other root resource classes loading ...
SpringServlet - Exception occurred when initialization
java.lang.RuntimeException: The scope of the component class my.package.MyExceptionMapper must be a singleton
at som.sun.jersey.core.spi.component.ioc.IoCProviderFactory.wrap(...)
,並在一個獨立的包層次結構,結果不會改變。
對此的任何幫助或指導將不勝感激。
你有沒有仔細檢查您所使用的javax。在Spring中啓用injectSingleton和javax.inject註解? –