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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring配置详解-scope属性

發(fā)布時間:2024/4/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring配置详解-scope属性 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "><!-- 創(chuàng)建方式1:空參構(gòu)造方法 --><bean name="user" class="com.learn.bean.User" scope="singleton"></bean><!-- 創(chuàng)建方式2:靜態(tài)工廠創(chuàng)建 調(diào)用UserFactory的createUser方法創(chuàng)建名為user2的對象,放入容器--><!-- <bean name="user2" class="com.learn.b_create.UserFactory" factory-method="createUser"></bean> --><!-- 創(chuàng)建方式2:實例工廠創(chuàng)建 --><!-- <bean name="user3" factory-bean="userFactory" factory-method="createUser2"></bean> --><!-- <bean name="userFactory" class="com.learn.b_create.UserFactory"></bean> --></beans> package com.learn.a_hello;import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;import com.learn.bean.User;public class Demo {/*** 創(chuàng)建方式1:空參構(gòu)造*/@Testpublic void fun1() {/*** 1.創(chuàng)建容器*/ApplicationContext ac = new ClassPathXmlApplicationContext("com/learn/b_create/applicationContext.xml");/*** 2.向容器要"user"對象*/User u = (User)ac.getBean("user");User u2 = (User)ac.getBean("user");User u3 = (User)ac.getBean("user");User u4 = (User)ac.getBean("user");System.out.println(u2==u4);/*** 打印user對象*/ // System.out.println(u);}/*** 創(chuàng)建方式2:靜態(tài)工廠*/@Testpublic void fun2() {/*** 1.創(chuàng)建容器*/ApplicationContext ac = new ClassPathXmlApplicationContext("com/learn/b_create/applicationContext.xml");/*** 2.向容器要"user"對象*/User u = (User)ac.getBean("user2");/*** 打印user對象*/System.out.println(u);}/*** 創(chuàng)建方式2:動態(tài)工廠*/@Testpublic void fun3() {/*** 1.創(chuàng)建容器*/ApplicationContext ac = new ClassPathXmlApplicationContext("com/learn/b_create/applicationContext.xml");/*** 2.向容器要"user"對象*/User u = (User)ac.getBean("user3");/*** 打印user對象*/System.out.println(u);} } User空參構(gòu)造方法 true scope屬性首先從位置上來講,它是在咱們的bean元素上加的,scope屬性,然后咱們來解釋這個scope屬性,他分別都有什么,代表什么意思,scope取值一般是四種,分別是什么呢,singleton,然后是prototype,還有叫request,還有叫session,常起的就是這四種,然后其中下面這兩種,標(biāo)成綠色,了解,這兩種標(biāo)成紅色,一個一個來看,singleton這什么意思,首先是一個默認(rèn)值,首先你要知道他是默認(rèn)值,現(xiàn)在咱們沒有用scope屬性,那就意味著,取值就是sigleton,就像他名字描述的一樣,單例的,單例對象,所謂單例對象,就是咱們這個對象在容器中,只會被創(chuàng)建一份,一個實例,被標(biāo)識為單例的對象,在Spring容器中,只會存在一個實例,那其實就是在剛才這里,我把scope等于singleton給他顯示的配上,那我們在這個demo里邊,就拿構(gòu)造來看就行了,看得到我這是啥意思不,我這里是不是獲得四次這個對象,但是因為它配置是singleton,返回的都是同一個對象,所以直接打印u2==u4,返回應(yīng)該是true,執(zhí)行一下就可以看到打印結(jié)果,是不是true,所以這就是所謂的單例,我把這個方法復(fù)制一份,單例,scope為singleton,這樣的話通過這例子就可以看出來,singleton的特點(diǎn),再看第二個取值,prototype,prototype其實翻譯過來的話,是多例的,多例原型,這啥意思呢,被標(biāo)識為多例的對象,每次再獲得時,才會創(chuàng)建,不會像單例在容器時就創(chuàng)建了,每次獲得時才會創(chuàng)建,并且每次創(chuàng)建,都是新的對象,那接下里可以掩飾一下,把scope改成prototype,然后demo里這個方法可以繼續(xù)用,剛才打印是true,如果多例的話,打印是什么,打印情況,單例是true,多例就是false,你會看到一堆構(gòu)造打印了 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "><!-- 創(chuàng)建方式1:空參構(gòu)造方法 --><bean name="user" class="com.learn.bean.User" scope="prototype"></bean><!-- 創(chuàng)建方式2:靜態(tài)工廠創(chuàng)建 調(diào)用UserFactory的createUser方法創(chuàng)建名為user2的對象,放入容器--><!-- <bean name="user2" class="com.learn.b_create.UserFactory" factory-method="createUser"></bean> --><!-- 創(chuàng)建方式2:實例工廠創(chuàng)建 --><!-- <bean name="user3" factory-bean="userFactory" factory-method="createUser2"></bean> --><!-- <bean name="userFactory" class="com.learn.b_create.UserFactory"></bean> --></beans> /*** scope:single單例* scope:prototype多例*/@Testpublic void fun4() {/*** 1.創(chuàng)建容器*/ApplicationContext ac = new ClassPathXmlApplicationContext("com/learn/b_create/applicationContext.xml");/*** 2.向容器要"user"對象*/User u = (User)ac.getBean("user");User u2 = (User)ac.getBean("user");User u3 = (User)ac.getBean("user");User u4 = (User)ac.getBean("user");/*** 單例:true* 多例:false*/System.out.println(u2==u4);/*** 打印user對象*/ // System.out.println(u);} User空參構(gòu)造方法 User空參構(gòu)造方法 User空參構(gòu)造方法 User空參構(gòu)造方法 false 這四個構(gòu)造方法都打印出來了,多例的每次獲得都會創(chuàng)建,然后再看這個取值,這個返回值,就是false,所以這兩個對象不是同一個對象,這就是多例的,那這兩個是scope屬性將來要使用的重點(diǎn),下面用不著的解釋一下,request指的是啥呢,web環(huán)境下,對象與request生命周期一致,也就是每次請求過后,而session的話,只有在web環(huán)境下才會有效,咱們創(chuàng)建被標(biāo)識的對象,與誰生命周期一致呢,session生命周期一致,咱們即使在WEB環(huán)境下也不會用這兩個scope的,記住這兩個沒用,你說上面的singleton和prototype,就是這兩個取值,什么情況下,咱們用singleton,在什么情況下使用prototype,在未來開發(fā)中,絕大多數(shù),scope屬性的取值,全都使用默認(rèn)值,就可以,但是切記,等到與struts框架整合的時候,Spring與Struts整合的時候,咱們說Action對象,交給Spring來負(fù)責(zé)管理,知道啥意思不,struts要去訪問或者調(diào)用action的時候,都會找Spring要,那這個時候切記,Action要配置成單例還是多例,多例,為啥,Struts2從架構(gòu)設(shè)計上來說,強(qiáng)調(diào)過,是每次請求都會,都會創(chuàng)建一個新的Action,所以,咱們Action這個Bean在使用的時候,必須聲明為多例的,那如果是單例的那就完了,同時有10個請求過來,struts找Spring要Action,結(jié)果Spring給了10個請求同一個Action,那你想他就改變了Struts的設(shè)計了,那問題就多了,所以prototype,將來要用的話,記住,在整合struts2時,咱們的ActionBean必須配置為多例的,其他絕大多數(shù),像DAO,Service,全都是單例的,單例就可以,在整個容器當(dāng)中,只有一個對象就夠了,這就是scope屬性

?

超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的spring配置详解-scope属性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。