资源在作用域原型中无法使用?
资源在作用域原型中无法使用?
这个问题已经有答案了:
可能是重复的:
我定义了一个Spring的@Controller
,我们使用@Scope(“request”)
并且使用@Resource
获取一个定义为@Scope(“prototype”)
的服务bean,但每次重新加载页面时我总是得到相同的服务bean实例。
我发现将@Resource
更改为@Autowired
实际上按照我所期望的方式工作,每个页面重新加载时我都会得到一个新的服务bean实例。
这是一种预期的行为吗?我是否漏了关于@Resource
和@Autowired
之间的区别的理解?
admin 更改状态以发布 2023年5月21日
这很奇怪,我本以为它们至少在范围方面的行为是相同的 - 据我所知,唯一的区别是以类型进行自动装配的@Autowired,以名称进行自动装配的@Resource。
我感到你的问题可能更多是需要在你的原型bean的@Scope注释中指定proxyMode:
@Scope(value="prototype", proxyMode=ScopedProxyMode.TARGET_CLASS) //Or ScopedProxyMode.INTERFACES
这是必要的,因为request
范围可能比原型范围更大。您将看到相同的代理实例被注入,但代理将确保当您调用您的依赖bean的方法时,它将被委派到适当作用域的bean。