资源不适用于范围原型?

时间:2012-09-20 11:28:53

标签: spring dependency-injection

  

可能重复:
  @Resource vs @Autowired

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

我发现将@Resource更改为@Autowired实际上是按照我期望的方式工作的,并且我为每个页面重新加载获得了一个新的服务bean实例。

这是预期的行为吗?我是否对@Resource@Autowired

之间的区别有所了解?

1 个答案:

答案 0 :(得分:1)

这很奇怪,我希望它们至少在范围方面表现相同 - 我所知道的唯一区别是关于自动装配的类型 - 按@Autowired的类型,按名称@Resource。

我觉得你的问题可能更多地与需要在protoype bean上使用@Scope注释指定proxyMode有关:

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

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