3 回答

TA貢獻1784條經驗 獲得超7個贊
獨立于您面臨的錯誤:讓我們看看您的課程設置:
你希望你的觀點是原型。所以每次你通過注入請求一個新的 Bean 時,Spring 都會給你一個新的實例。
現在您將原型 bean 注入到默認情況下為單例的 Triangle bean 中(這意味著它只被請求和創建一次)。所以原型 bean (Point) 也被請求一次以將它們注入到單例 Triangle bean 中。
從現在開始,您的原型 bean 不再像原型 bean 那樣工作,這意味著它們從您的 Triangle bean 繼承了單例范圍。
但是在這個設置上你很好,但你應該記住這個陷阱:只有當容器/上下文請求 bean 時,Spring 才會創建原型 bean 的新實例。

TA貢獻1770條經驗 獲得超3個贊
您正在獲得 NPE,因為上下文對象在下面和類似方法中為空
public void setPointC(Point pointC) {
this.pointC = (Point)this.context.getBean("point3");
}
僅當所有 bean 都已初始化并且上下文對象已準備好時,才會在 ApplicationContextAware bean 中設置上下文對象。
您的代碼應如下所示
public void setPointC(Point pointC) {
this.pointC = pointC;
}

TA貢獻1871條經驗 獲得超8個贊
兩個原因導致你的代碼拋出異常:
new ClassPathXmlApplicationContext("spring.xml")
方法無法意識到類上下文已準備就緒。循環依賴。創建
ApplicationContext
需要成功創建所有bean,但Triangle
需要一個上下文。
您可以使用 IOC 來解決您的問題。
添加回答
舉報