リクエストスコープのBeanをオートワイヤする方法が他にもあるのだろうかと思います。だから、今の私には、構成ファイル内bean
を作成しました:リクエストスコープのBeanをオートワイヤする方法
@Bean
@Scope(value=WebApplicationContext.SCOPE_REQUEST, proxyMode=ScopedProxyMode.DEFAULT)
public List<String> stringBean(){
return new ArrayList<String>();
}
ので、通常、私はbean
を使用するapplicationContext
をautowireます:
@Autowired
private ApplicationContext context;
@Override
public void anyName() {
List<String> list = (List<String>) getContext().getBean("stringBean");
}
これは完全に正常に動作します。しかし、私はコンテキストと、キャストの必要性をautowireしたくない。だから私は、直接豆をautowireすることを試みた:
@Autowired
private List<String> stringBean;
私は、要求が開始される前に、Beanが作成されていないためにも明らかであるものをアプリケーションの起動によって例外が発生しました。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'stringBean': Scope 'request' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
リクエストスコープのBeanをオートワイヤする他の方法はありますか?
'あなたがいずれかを設定していない場合ScopedProxyMode.DEFAULT'は、NOを意味します
は、いくつかの有用なドキュメントに見てください(プロキシは作成されません)。 'CGLIB'プロキシを使うために' ScopedProxyMode.TARGET_CLASS'を使ってみてください。 – alfcope
@alfcopeはこれが動作しているようです。違いを説明できますか?答えにもなることができます。 – Patrick
確かに、そこにあります。それはすべてプロキシについてです。 – alfcope