2011-11-03 66 views
2

如何將會話作用域bean注入到沒有代理的另一個會話作用域bean中?作用域bean:注入另一個

@Component 
@Scope("session") 
class Foo { 
    @Inject Bar bar; 
} 

@Component 
@Scope("session") 
class Bar { 
} 

它報告錯誤「沒有匹配的bean」。雖然TARGET_CLASS作用域代理可以解決這個問題,但爲什麼我需要一個代理作用於相同的作用域bean?

+0

出於好奇,如果使用'@ Autowired'而不是'@Inject',會發生什麼? – skaffman

+1

您需要包含更多信息,在相同範圍的bean之間連接會話範圍的bean可以正常工作,無需代理。我假設你的代碼@Component拼寫正確?您的Bar類是否由組件掃描拾取? – mrembisz

+0

@mrembisz:是的,它是@Component,我的錯誤。 「包含更多信息」 - 如何? –

回答

0

我的猜測是 - 因爲在注入點,spring根據當前bean的範圍不區​​分注入的bean。它需要一個代理來獲取目標bean(在這種情況下是來自會話),忽略注入的bean的範圍。

+0

在Scope接口中,有一個conversationId,如果兩個會話Bean屬於同一個會話,他們的conversationId應該是相同的,然後代理不是必需的,不是嗎?範圍代理依靠調用'Scope.get(「beanName」)'來獲取屬於當前上下文的bean也可以打破依賴關係。 –

+0

嗯,它可能是。 Spring解決代理後可以應用它。我不知道確切地說,但不管怎樣,不考慮注入依賴關係的bean的範圍是有意義的。 – Bozho

+0

舉一個例子:如果你有foo:1(bar:proxy-> bar:1)會話:1序列化,並且稍後在會話:2中恢復,現在bar:proxy會指向bar:2,然後foo: 1壞了。 –

相關問題