日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringIOC的创建对象的单例多例模式和自动注入

發布時間:2023/12/3 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringIOC的创建对象的单例多例模式和自动注入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[1] SpringIOC創建對象的單例和多例模式

問題:

Spring容器對象根據配置文件創建對象的時機默認發生在Spring容器對象在被創建的時候,也就是說,我們一旦獲取到Spring容器對象,意味著可以直接獲取Spring容器中的對象使用了.那么,如果我對同一個bean對象,連續獲取N次,獲取到的是不是同一個對象呢?因為spring容器對象底層使用的是map集合存儲的bean對象,對map集合按照同一個鍵名獲取數據,獲取的是同一個,也就說按照同一個鍵名從Spring容器中獲取的都是同一個對象,那么如果我們希望相同的鍵名獲取的對象每次都不一樣,怎么實現?

解決:

不要在Spring容器對象創建的時候,就完成對象的初始化創建,而是變為,從Spring容器中獲取的時候才創建,每次獲取都重新創建.

實現:

Spring容器的單例和多例模式創建對象. 單例模式(默認):
設置了單例模式的bean,會在Spring容器對象被創建的時候 就完成初始化創建,無論獲取多少次都是同一個對象. 多例模式:
設置了多例模式的bean,在Spring容器對象被創建的時候不會被初 始化創建,每次獲取的時候都會重新創建,每次獲取的對象都不相同.

使用:

applicationcontext.xml: <?xml version="1.0" encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--SpringIOC設置對象的單例模式和多例模式創建對象單例模式:默認模式,在bean標簽上使用scope屬性,默認值為singleton多例模式:在bean標簽上使用scope屬性設置,值為prototype--><bean id="stu" class="com.java.pojo.Student" scope="singleton"></bean><bean id="tea" class="com.java.pojo.Teacher" scope="prototype"></bean> </beans>TestIocModel package com.java.controller; import com.java.pojo.User; import com.java.service.UserService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.request.async.WebAsyncUtils; import org.springframework.web.context.support.WebApplicationContextUtils; import javax.rmi.CORBA.StubDelegate; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;@WebServlet(value = "/user", loadOnStartup = 1) public class UserServlet extends HttpServlet {public static void main(String[] args) {//獲取Spring容器對象ApplicationContext ac = new ClassPathXmlApplicationContext("applicationcontext.xml");Student stu =(Student) ac.getBean("stu");Student stu2 =(Student) ac.getBean("stu");Teacher teacher = (Teacher) ac.getBean("stu");Teacher teacher2 = (Teacher) ac.getBean("stu");System.out.println("學生:"+(stu==stu2));System.out.println("教室:"+(teacher==teacher2));} }

[2] SpringIOC的自動注入

問題:

在學習了SpringIOC的DI依賴注入后,我們可以根據對象之間的依賴關系的 責任鏈,讓Spring容器對象幫我們創建有一個組裝好的對象,比如A中有B,B 中有C,C中有D.將A,B
,C,D都創建為Bean對象,然后使用ref屬性告訴Spring 對象之間的依賴關系的組裝規則,假如依賴責任鏈特別長,使用ref注入就會很 麻煩.怎么辦?

解決:

不要聲明ref屬性來指明依賴關系的注入,只需要告訴Spring容器對象依賴關 系的注入規則,Spring容器對象自動根據規則完成依賴關系的注入.

實現:

①根據bean的ID和屬性名一致的規則
②根據bean的類型和屬性的類型一致的規則
③根據構造器形參的類型和bean的類型一致的規則
④不能使用自動注入,只能手動聲明
⑤使用默認規則

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"default-autowire="byName"><!--設置自動注入--><!--自動注入:在標簽上使用autowire屬性設置自動注入規則.該屬性聲明在要注入資源的bean標簽上,比如:學生的beanautowire屬性的值:byName:按照屬性名和某個bean的id相同的規則自動注入byType:按照屬性的類型和某個bean的類型相同的規則自動注入.注意:同類型的bean只能有一個,否則報錯.constructor:必須聲明對應的構造器,根據構造器形參的類型和某個bean的類型相同的規則自動注入.no:不使用自動注入,必須使用ref手動注入.default:使用默認注入規則.默認值.注意:可以在beans頂層元標記中使用屬性default-autowire聲明全局自動注入規則.--><bean id="stu" class="com.java.pojo.Student" autowire="byName"><!--用構造器的方法,此處要創建一個只有Teacher一個參數的構造器--><!--<constructor-arg index="0" type="com.Teacher" ref="tea"></constructor-arg>--><property name="sid" value="1"></property><property name="sname" value="張三"></property></bean><bean id="teacher" class="com.bjsxt.pojo.Teacher"><property name="tname" value="liu"></property><property name="tid" value="1"></property></bean> </beans>

總結

以上是生活随笔為你收集整理的SpringIOC的创建对象的单例多例模式和自动注入的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。