如何將會話作用域bean注入到沒有代理的另一個會話作用域bean中?作用域bean:注入另一個
@Component
@Scope("session")
class Foo {
@Inject Bar bar;
}
@Component
@Scope("session")
class Bar {
}
它報告錯誤「沒有匹配的bean」。雖然TARGET_CLASS
作用域代理可以解決這個問題,但爲什麼我需要一個代理作用於相同的作用域bean?
如何將會話作用域bean注入到沒有代理的另一個會話作用域bean中?作用域bean:注入另一個
@Component
@Scope("session")
class Foo {
@Inject Bar bar;
}
@Component
@Scope("session")
class Bar {
}
它報告錯誤「沒有匹配的bean」。雖然TARGET_CLASS
作用域代理可以解決這個問題,但爲什麼我需要一個代理作用於相同的作用域bean?
我的猜測是 - 因爲在注入點,spring根據當前bean的範圍不區分注入的bean。它需要一個代理來獲取目標bean(在這種情況下是來自會話),忽略注入的bean的範圍。
在Scope接口中,有一個conversationId,如果兩個會話Bean屬於同一個會話,他們的conversationId應該是相同的,然後代理不是必需的,不是嗎?範圍代理依靠調用'Scope.get(「beanName」)'來獲取屬於當前上下文的bean也可以打破依賴關係。 –
嗯,它可能是。 Spring解決代理後可以應用它。我不知道確切地說,但不管怎樣,不考慮注入依賴關係的bean的範圍是有意義的。 – Bozho
舉一個例子:如果你有foo:1(bar:proxy-> bar:1)會話:1序列化,並且稍後在會話:2中恢復,現在bar:proxy會指向bar:2,然後foo: 1壞了。 –
出於好奇,如果使用'@ Autowired'而不是'@Inject',會發生什麼? – skaffman
您需要包含更多信息,在相同範圍的bean之間連接會話範圍的bean可以正常工作,無需代理。我假設你的代碼@Component拼寫正確?您的Bar類是否由組件掃描拾取? – mrembisz
@mrembisz:是的,它是@Component,我的錯誤。 「包含更多信息」 - 如何? –