我尝试使用@Scope注释更改bean的范围。该bean实际上用作MessageSource并用于国际化目的。
mvc-dispacher-servlet.xml中的模式如下:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
控制台中描述的异常如下:
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Cannot locate BeanDefinitionParser for element [scoped-proxy]
答案 0 :(得分:0)
确定。如果它是普通的bean,那么很可能你只是缺少scope标记的xml解析器。为了能够使用范围代理,您需要注册aop:scoped-proxy。
在SO上有一个类似的问题: Accessing a session-scoped bean inside a controller
结果是:
否则你应该通过谷歌轻松找到关于这个主题的一些教程。
答案 1 :(得分:0)
您可能在bean之外有一个bean范围的选项(我犯了这样的错误,并收到了像您一样的msg错误):
<beans>
...
<aop:config proxy-target-class="true"/>
<aop:scoped-proxy proxy-target-class="true"/>
<aop:aspectj-autoproxy proxy-target-class="true"/>
...
只需将这个选项放在bean声明中:
<bean ... target="step">
<aop:scoped-proxy proxy-target-class="true"/>
</bean>
还有一件事-我只对作用域内的bean出现了这种错误。