资源在作用域原型中无法使用?

20 浏览
0 Comments

资源在作用域原型中无法使用?

这个问题已经有答案了:

可能是重复的:

@Resource vs @Autowired

我定义了一个Spring的@Controller,我们使用@Scope(“request”)并且使用@Resource获取一个定义为@Scope(“prototype”)的服务bean,但每次重新加载页面时我总是得到相同的服务bean实例。

我发现将@Resource更改为@Autowired实际上按照我所期望的方式工作,每个页面重新加载时我都会得到一个新的服务bean实例。

这是一种预期的行为吗?我是否漏了关于@Resource@Autowired之间的区别的理解?

admin 更改状态以发布 2023年5月21日
0
0 Comments

这很奇怪,我本以为它们至少在范围方面的行为是相同的 - 据我所知,唯一的区别是以类型进行自动装配的@Autowired,以名称进行自动装配的@Resource。

我感到你的问题可能更多是需要在你的原型bean的@Scope注释中指定proxyMode:

@Scope(value="prototype", proxyMode=ScopedProxyMode.TARGET_CLASS) //Or ScopedProxyMode.INTERFACES

这是必要的,因为request范围可能比原型范围更大。您将看到相同的代理实例被注入,但代理将确保当您调用您的依赖bean的方法时,它将被委派到适当作用域的bean。

0