版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Bean的配置Bean的實(shí)例化Bean配置方式Bean的作用域Bean的生命周期第7章
SpringBean2024/1/29學(xué)習(xí)目標(biāo)/Target2了解Bean的常用屬性及其子元素掌握實(shí)例化Bean的3種方式
熟悉Bean的作用域和生命周期
了解常用作用域singleton和prototype
掌握Bean的3種裝配方式章節(jié)概述/Summary3第6章詳細(xì)講解了控制反轉(zhuǎn)和依賴注入,它們實(shí)現(xiàn)了組件的實(shí)例化不再由應(yīng)用程序完成,轉(zhuǎn)而交由Spring容器完成,從而將組件之間的依賴關(guān)系進(jìn)行了解耦。控制反轉(zhuǎn)和依賴注入都是通過(guò)Bean實(shí)現(xiàn)的,Bean是注冊(cè)到Spring容器中的Java類,任何一個(gè)Java類都可以是一個(gè)Bean。Bean由Spring進(jìn)行管理,本章將針對(duì)Bean的管理進(jìn)行詳細(xì)講解。目錄/CONTENTSBean的配置Bean的作用域Bean配置方式Bean的實(shí)例化4Bean的生命周期14325Bean的配置01第7章SpringBean什么是Spring中的Bean?Bean的配置6如果把Spring看做一個(gè)大型工廠,則Spring容器中的Bean就是該工廠的產(chǎn)品。要想使用這個(gè)工廠生產(chǎn)和管理Bean,就需要在配置文件中告訴它需要哪些Bean,以及需要使用何種方式將這些Bean裝配到一起。
小提示:Bean的本質(zhì)就是Java中的類,而Spring中的Bean其實(shí)就是對(duì)實(shí)體類的引用,來(lái)生產(chǎn)Java類對(duì)象,從而實(shí)現(xiàn)生產(chǎn)和管理Bean。Bean的配置7Spring容器支持兩種格式的配置文件XML文件Properties文件
在實(shí)際開(kāi)發(fā)中,最常使用的是XML文件格式的配置方式,這種配置方式是通過(guò)XML文件來(lái)注冊(cè)并管理Bean之間的依賴關(guān)系。Spring容器所支持的配置文件格式
Spring容器支持XML和Properties兩種格式的配置文件,在實(shí)際開(kāi)發(fā)中,最常用的是XML格式的配置文件。XML是標(biāo)準(zhǔn)的數(shù)據(jù)傳輸和存儲(chǔ)格式,方便查看和操作數(shù)據(jù)。在Spring中,XML配置文件的根元素是<beans>,<beans>元素包含<bean>子元素,每個(gè)<bean>子元素可以定義一個(gè)Bean,通過(guò)<bean>元素將Bean注冊(cè)到Spring容器中。Bean的配置8
XML配置文件的根元素是<beans>,<beans>中包含了多個(gè)<bean>子元素,每一個(gè)<bean>子元素定義了一個(gè)Bean,并描述了該Bean如何被裝配到Spring容器中。關(guān)于<beans>元素的常用屬性如下表所示:屬性描述idid屬性是<bean>元素的唯一標(biāo)識(shí)符,Spring容器對(duì)Bean的配置和管理通過(guò)id屬性完成,裝配Bean時(shí)也需要根據(jù)id值獲取對(duì)象。
name
name屬性可以為Bean指定多個(gè)名稱,每個(gè)名稱之間用逗號(hào)或分號(hào)隔開(kāi)。
classclass屬性可以指定Bean的具體實(shí)現(xiàn)類,其屬性值為對(duì)象所屬類的全路徑。scopescope屬性用于設(shè)定Bean實(shí)例的作用范圍,其屬性值有:singleton(單例)、prototype(原型)、request、session和globalsession。<bean>元素的常用子元素9元素描述<constructor-arg>
使用<constructor-arg>元素可以為Bean的屬性指定值。
<property>
<property>元素的作用是調(diào)用Bean實(shí)例中的setter方法完成屬性賦值,從而完成依賴注入。
ref
ref是<property>、<constructor-arg>等元素的屬性,可用于指定Bean工廠中某個(gè)Bean實(shí)例的引用;也可用于指定Bean工廠中某個(gè)Bean實(shí)例的引用。value
value是<property>、<constructor-arg>等元素的屬性,用于直接指定一個(gè)常量值;也可以用于直接指定一個(gè)常量值。<list><list>元素是<property>等元素的子元素,用于指定Bean的屬性類型為L(zhǎng)ist或數(shù)組。
<set><set>元素是<property>等元素的子元素,用于指定Bean的屬性類型為set。<map><map>元素是<property>等元素的子元素,用于指定Bean的屬性類型為Map。<entry>entry>元素是<map>元素的子元素,用于設(shè)定一個(gè)鍵值對(duì)。<entry>元素的key屬性指定字符串類型的鍵。Bean的配置10
在配置文件中,通常一個(gè)普通的Bean只需要定義id(或name)和class兩個(gè)屬性即可,定義Bean的方式如下所示:<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd">
<beanid="bean1"class="com.test.Bean1"/><beanname="bean2"class="com.test.Bean2"/></beans>
小提示:如果在Bean中未指定id和name,則Spring會(huì)將class值當(dāng)作id使用。BeanFactory接口的常用方法BeanFactory接口11方法名稱描述getBean(Stringname)根據(jù)參數(shù)名稱獲取Bean
getBean(Stringname,Class<T>type)根據(jù)參數(shù)名稱、參數(shù)類型獲取Bean
<T>TgetBean(Class<T>requiredType)根據(jù)參數(shù)類型獲取Bean
ObjectgetBean(Stringname,Object...args)根據(jù)參數(shù)名稱獲取Bean
isTypeMatch(Stringname,ResolvableTypetype)判斷是否有與參數(shù)名稱、參數(shù)類型匹配的Bean
Class<?>getType(Stringname)根據(jù)參數(shù)名稱獲取類型String[]getAliases(Stringname)根據(jù)實(shí)例的名字獲取實(shí)例的別名數(shù)組booleancontainsBean(Stringname)根據(jù)Bean的名稱判斷Spring容器是否含有指定的Bean
BeanFactory接口實(shí)例的語(yǔ)法格式Spring提供了幾個(gè)BeanFactory接口的實(shí)現(xiàn)類,其中最常用的是XmlBeanFactory,它可以讀取XML文件并根據(jù)XML文件中的配置信息生成BeanFactory接口的實(shí)例,BeanFactory接口的實(shí)例用于管理Bean。XmlBeanFactory類讀取XML文件生成BeanFactory接口實(shí)例的具體語(yǔ)法格式如下。BeanFactory接口12BeanFactorybeanFactory=newXmlBeanFactory (newFileSystemResource(”D:/bean.xml”));ApplicationContext接口的特點(diǎn)
ApplicationContext接口建立在BeanFactory接口的基礎(chǔ)之上,它豐富了BeanFactory接口的特性,例如,添加了對(duì)國(guó)際化、資源訪問(wèn)、事件傳播等方面的支持。
ApplicationContext接口可以為單例的Bean實(shí)行預(yù)初始化,并根據(jù)<property>元素執(zhí)行setter方法,單例的Bean可以直接使用,提升了程序獲取Bean實(shí)例的性能。ApplicationContext接口13ApplicationContext接口的常用實(shí)現(xiàn)類ApplicationContext接口14類名稱描述ClassPathXmlApplicationContext
從類路徑加載配置文件,實(shí)例化ApplicationContext接口FileSystemXmlApplicationContext
從文件系統(tǒng)加載配置文件,實(shí)例化ApplicationContext接口AnnotationConfigApplicationContext
從注解中加載配置文件,實(shí)例化ApplicationContext接口WebApplicationContext
在Web應(yīng)用中使用,從相對(duì)于Web根目錄的路徑中加載配置文件,實(shí)例化ApplicationContext接口ConfigurableWebApplicationContext擴(kuò)展了WebApplicationContext類,它可以通過(guò)讀取XML配置文件的方式實(shí)例化WebApplicationContext類Bean的實(shí)例化02第7章SpringBeanBean的實(shí)例化有哪些方式?Bean的實(shí)例化16
在面向?qū)ο蟮某绦蛑?,想要使用某個(gè)對(duì)象,就需要先實(shí)例化這個(gè)對(duì)象。同樣,在Spring中,要想使用容器中的Bean,也需要實(shí)例化Bean。實(shí)例化Bean有三種方式,分別為構(gòu)造器實(shí)例化、靜態(tài)工廠方式實(shí)例化和實(shí)例工廠方式實(shí)例化(其中最常用的是構(gòu)造器實(shí)例化)。構(gòu)造器實(shí)例化17創(chuàng)建Web項(xiàng)目,導(dǎo)入相關(guān)Jar包;創(chuàng)建名為Bean1的Java類;創(chuàng)建Spring配置文件beans1.xml,并配置Bean1實(shí)體類Bean;創(chuàng)建測(cè)試類,測(cè)試程序。<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-4.3.xsd"><beanid="bean1"class="com.test.instance.constructor.Bean1"/></beans>
構(gòu)造器實(shí)例化是指Spring容器通過(guò)Bean對(duì)應(yīng)的類中默認(rèn)的構(gòu)造函數(shù)來(lái)實(shí)例化Bean。接下來(lái)演示構(gòu)造器實(shí)例化的使用:publicclassInstanceTest1{publicstaticvoidmain(String[]args){ StringxmlPath="com/test/instance/constructor/beans1.xml";ApplicationContextapplicationContext= newClassPathXmlApplicationContext(xmlPath); Bean1bean=(Bean1)applicationContext.getBean("bean1");System.out.println(bean);}}靜態(tài)工廠方式實(shí)例化18創(chuàng)建名為Bean2的Java類;創(chuàng)建一個(gè)Java工廠類,在類中使用靜態(tài)方法獲取Bean2實(shí)例;創(chuàng)建Spring配置文件beans2.xml,并配置工廠類Bean;創(chuàng)建測(cè)試類,測(cè)試程序。<beanid="bean2"class="com.test.instance.static_factory.MyBean2Factory" factory-method="createBean"/>
靜態(tài)工廠是實(shí)例化Bean的另一種方式。該方式要求自己創(chuàng)建一個(gè)靜態(tài)工廠的方法來(lái)創(chuàng)建Bean的實(shí)例。接下來(lái)演示靜態(tài)工廠實(shí)例化的使用:publicclassInstanceTest2{publicstaticvoidmain(String[]args){ StringxmlPath="com/test/instance/static_factory/beans2.xml"; ApplicationContextapplicationContext= newClassPathXmlApplicationContext(xmlPath); System.out.println(applicationContext.getBean("bean2"));}}publicclassMyBean2Factory{ publicstaticBean2createBean(){returnnewBean2();}}實(shí)例工廠方式實(shí)例化19創(chuàng)建名為Bean3的Java類;創(chuàng)建一個(gè)Java工廠類,在類中使用非靜態(tài)方法獲取Bean3實(shí)例;創(chuàng)建Spring配置文件beans3.xml,并配置工廠類Bean;創(chuàng)建測(cè)試類,測(cè)試程序。<beanid="myBean3Factory"class="com.test.instance.factory.MyBean3Factory"/><beanid="bean3"factory-bean="myBean3Factory"factory-method="createBean"/>
實(shí)例工廠是采用直接創(chuàng)建Bean實(shí)例的方式,在配置文件中,通過(guò)factory-bean屬性配置一個(gè)實(shí)例工廠,然后使用factory-method屬性確定使用工廠中的哪個(gè)方法。接下來(lái)演示實(shí)例工廠實(shí)例化的使用:publicclassInstanceTest3{publicstaticvoidmain(String[]args){ StringxmlPath="com/test/instance/factory/beans3.xml"; ApplicationContextapplicationContext= newClassPathXmlApplicationContext(xmlPath); System.out.println(applicationContext.getBean("bean3"));}}publicclassMyBean3Factory{publicBean3createBean(){returnnewBean3();}}使用不同方式實(shí)現(xiàn)Bean的實(shí)例化20需求說(shuō)明修改第6章的案例,開(kāi)發(fā)第一個(gè)Spring項(xiàng)目,輸出“Hello,Spring!”,具體要求如下。(1)編寫(xiě)HelloSpring.java,輸出“Hello,Spring!”。(2)將Spring字符串通過(guò)Spring賦值到HelloSpring.java中。(3)分別使用構(gòu)造器實(shí)例化Bean、靜態(tài)工廠實(shí)例化Bean和實(shí)例工廠實(shí)例化Bean。共性問(wèn)題集中講解21常見(jiàn)問(wèn)題及解決辦法代碼規(guī)范問(wèn)題調(diào)試技巧共性問(wèn)題集中講解Bean配置方式
——基于XML的配置03第7章SpringBean什么是Bean的裝配?Bean的裝配方式23
Bean的裝配可以理解為依賴關(guān)系注入,Bean的裝配方式即Bean依賴注入的方式。Spring容器支持多種形式的Bean的裝配方式,如基于XML的裝配、基于注解(Annotation)的裝配和自動(dòng)裝配(其中最常用的是基于注解的裝配),本節(jié)將主要講解這三種裝配方式的使用?;赬ML的裝配24基于XML的裝配(2種方式)構(gòu)造注入(ConstructorInjection)設(shè)值注入(SetterInjection)必備以下條件必備以下條件Bean類必須有一個(gè)無(wú)參構(gòu)造方法Bean類必須為屬性提供setter方法Bean類必須提供有參構(gòu)造方法在配置文件中,使用<property>元素來(lái)為每個(gè)屬性注入值配置文件中,使用<constructor-arg>元素來(lái)為參數(shù)注入值
基于XML的裝配,使用方式如下:創(chuàng)建Java類,提供有參、無(wú)參構(gòu)造以及屬性setter方法;創(chuàng)建Spring配置文件beans5.xml,使用2種方式配置Bean;創(chuàng)建測(cè)試類,測(cè)試程序。<beanid="user1"class="com.test.assemble.User"> <constructor-argindex="0"value="tom"/>...</bean><beanid="user2"class="com.test.assemble.User"> <propertyname=“username”value=“張三”/>...</bean>publicclassXmlBeanAssembleTest{publicstaticvoidmain(String[]args){ StringxmlPath="com/test/assemble/beans5.xml"; ApplicationContextapplicationContext= newClassPathXmlApplicationContext(xmlPath);System.out.println(applicationContext.getBean("user1"));System.out.println(applicationContext.getBean("user2"));}}publicUser(Stringusername,Integerpassword,List<String>list){ super(); this.username=username; this.password=password; this.list=list;}publicUser(){super();}......//省略屬性setter方法基于XML的裝配25使用構(gòu)造方法注入實(shí)現(xiàn)為屬性賦值26需求說(shuō)明(1)修改第6章的案例,輸出內(nèi)容如下。張三說(shuō):“Spring的初衷是使JavaEE輕量級(jí)框架開(kāi)發(fā)更加簡(jiǎn)單?!崩钏恼f(shuō):“Spring的IoC,也稱DI,是OOP中的一種設(shè)計(jì)理念,用來(lái)降低代碼之間的耦合度?!保?)將說(shuō)話人和說(shuō)話內(nèi)容都通過(guò)構(gòu)造方法注入。共性問(wèn)題集中講解27常見(jiàn)問(wèn)題及解決辦法代碼規(guī)范問(wèn)題調(diào)試技巧共性問(wèn)題集中講解使用p命名空間實(shí)現(xiàn)屬性setter方法注入28從Spring2.0的配置文件開(kāi)始采用schema形式,可以使用不同的命名空間管理不同類型的配置,使配置文件更具擴(kuò)展性。例如,曾經(jīng)使用AOP命名空間的元素可以實(shí)現(xiàn)置入切面的功能,在本章及之后章節(jié)內(nèi)容的學(xué)習(xí)中讀者還會(huì)接觸更多其他命名空間的配置。此外,Spring基于schema形式的配置為許多領(lǐng)域的問(wèn)題提供了簡(jiǎn)化的配置方法,大大簡(jiǎn)化了配置。<!--使用p命名空間注入屬性值--><beanid="user"class="cn.dsscm.pojo.User"p:username="張三"p:age="23"
p:email="zhangsan@163.com"/>使用p命名空間實(shí)現(xiàn)屬性setter方法注入29對(duì)于直接量(基本數(shù)據(jù)類型、string類型)的屬性語(yǔ)法p:屬性名="屬性值"對(duì)于引用Bean的屬性語(yǔ)法p:屬性名-ref="Bean的id"使用p命名空間實(shí)現(xiàn)直接量的注入30需求說(shuō)明(1)修改本章上機(jī)練習(xí)2的實(shí)現(xiàn)代碼,對(duì)說(shuō)話人和說(shuō)話內(nèi)容使用p命名空間通過(guò)屬性setter方法注入。(2)輸出內(nèi)容如下。張三說(shuō):“Spring的初衷是使JavaEE輕量級(jí)框架開(kāi)發(fā)更加簡(jiǎn)單?!崩钏恼f(shuō):“Spring的IoC,也稱DI,是OOP中的一種設(shè)計(jì)理念,用來(lái)降低代碼之間的耦合度?!惫残詥?wèn)題集中講解31常見(jiàn)問(wèn)題及解決辦法代碼規(guī)范問(wèn)題調(diào)試技巧共性問(wèn)題集中講解注入不同數(shù)據(jù)類型32注入直接量(基本數(shù)據(jù)類型、string類型)引用其他Bean引用內(nèi)部Bean注入集合類型屬性注入空字符串和nullBean配置方式
——基于注解的配置04第7章SpringBean基于Annotation的裝配34
基于XML的裝配可能會(huì)導(dǎo)致XML配置文件過(guò)于臃腫,給后續(xù)的維護(hù)和升級(jí)帶來(lái)一定的困難。為此,Spring提供了對(duì)Annotation(注解)技術(shù)的全面支持。注解描述@Component指定一個(gè)普通的Bean,可以作用在任何層次。@Controller指定一個(gè)控制器組件Bean,用于將控制層的類標(biāo)識(shí)為Spring中的Bean,功能上等同于@Component。@Service指定一個(gè)業(yè)務(wù)邏輯組件Bean,用于將業(yè)務(wù)邏輯層的類標(biāo)識(shí)為Spring中的Bean,功能上等同于@Component。@Repository指定一個(gè)數(shù)據(jù)訪問(wèn)組件Bean,用于將數(shù)據(jù)訪問(wèn)層的類標(biāo)識(shí)為Spring中的Bean,功能上等同于@Component。@Scope指定Bean實(shí)例的作用域。@Value指定Bean實(shí)例的注入值。@Autowired指定要自動(dòng)裝配的對(duì)象。@Resource指定要注入的對(duì)象。@Qualifier指定要自動(dòng)裝配的對(duì)象名稱,通常與@Autowired聯(lián)合使用。@PostConstruct指定Bean實(shí)例完成初始化后調(diào)用的方法。@PreDestroy指定Bean實(shí)例銷(xiāo)毀前調(diào)用的方法?;贏nnotation的裝配35基于Annotation裝配的使用方式如下:JDBC驅(qū)動(dòng)器:由數(shù)據(jù)庫(kù)廠商創(chuàng)建,也稱為JDBC驅(qū)動(dòng)程序。負(fù)責(zé)與特定的數(shù)據(jù)庫(kù)連接,以及處理通信細(xì)節(jié)。創(chuàng)建接口UserDao,并定義方法;創(chuàng)建接口實(shí)現(xiàn)類UserDaoImpl,用@Repository聲明類;創(chuàng)建接口UserService,并定義方法;創(chuàng)建接口實(shí)現(xiàn)類UserServiceImpl,用@Service聲明類,并使用@Resource注入U(xiǎn)serDao屬性;創(chuàng)建控制器類,用@Controller聲明,并使用@Resource注入U(xiǎn)serService屬性;創(chuàng)建Spring配置文件,配置Bean;創(chuàng)建測(cè)試類,測(cè)試程序。@Repository("userDao")publicclassUserDaoImplimplementsUserDao{publicvoidsave(){System.out.println("userdao...save...");}}publicclassAnnotationAssembleTest{publicstaticvoidmain(String[]args){StringxmlPath="com/test/annotation/beans6.xml"; ApplicationContextapplicationContext= newClassPathXmlApplicationContext(xmlPath); UserControlleruserController= (UserController)applicationContext.getBean("userController"); userController.save();}}<context:annotation-config/><beanid="userDao"class="com.test.annotation.UserDaoImpl"/><beanid="userService"class="com.test.annotation.UserServiceImpl"/><beanid="userController"class="com.test.annotation.UserController"/>@Service("userService")publicclassUserServiceImplimplementsUserService{ @Resource(name="userDao") privateUserDaouserDao; publicvoidsave(){ this.userDao.save(); }}@Controller("userController")publicclassUserController{ @Resource(name="userService") privateUserServiceuserService; publicvoidsave(){ this.userService.save(); }}
小提示:
除了可以像示例中通過(guò)<bean>元素來(lái)配置Bean外,還可以通過(guò)包掃描的形式來(lái)配置一個(gè)包下的所有Bean:<context:component-scanbase-package="com.test.annotation"/>Bean配置方式
——自動(dòng)配置05第7章SpringBean自動(dòng)裝配37
所謂自動(dòng)裝配,就是將一個(gè)Bean自動(dòng)的注入到到其他Bean的Property中。Spring的<bean>元素中包含一個(gè)autowire屬性,我們可以通過(guò)設(shè)置autowire的屬性值來(lái)自動(dòng)裝配Bean。autowire屬性有5個(gè)值,其值及說(shuō)明下表所示:屬性值描述default(默認(rèn)值)由<bean>的上級(jí)元素<beans>的default-autowire屬性值確定。byName
根據(jù)<bean>元素id屬性的值自動(dòng)裝配。
byType
根據(jù)<bean>元素的數(shù)據(jù)類型(Type)自動(dòng)裝配,如果一個(gè)Bean的數(shù)據(jù)類型,兼容另一個(gè)Bean中的數(shù)據(jù)類型,則自動(dòng)裝配。constructor根據(jù)構(gòu)造函數(shù)參數(shù)的數(shù)據(jù)類型,進(jìn)行byType模式的自動(dòng)裝配。no默認(rèn)值,不使用自動(dòng)裝配,Bean依賴必須通過(guò)<ref>元素或ref屬性定義。自動(dòng)裝配38自動(dòng)裝配,使用方式如下:JDBC驅(qū)動(dòng)器:由數(shù)據(jù)庫(kù)廠商創(chuàng)建,也稱為JDBC驅(qū)動(dòng)程序。負(fù)責(zé)與特定的數(shù)據(jù)庫(kù)連接,以及處理通信細(xì)節(jié)。修改上一節(jié)UserServiceImple和UserController,分別增加類屬性的setter方法;修改Spring配置文件,使用autowire屬性配置Bean;重新測(cè)試程序。<beanid="userDao"class="com.test.annotation.UserDaoImpl"/><beanid="userService"class="com.test.annotation.UserServiceImpl"autowire="byName"/><beanid="userController"class="com.test.annotation.UserController"autowire="byName"/>Bean的作用域06第7章SpringBean作用域的種類40
Spring中為Bean的實(shí)例定義了7種作用域,如下表所示:
注意:在上表7種作用域中,singleton和prototype是最常用的兩種作用域。作用域名城描述singleton單例模式。在單例模式下,Spring容器中只會(huì)存在一個(gè)共享的Bean實(shí)例,所有對(duì)Bean的請(qǐng)求,只要請(qǐng)求的id(或name)與Bean的定義相匹配,會(huì)返回Bean的同一個(gè)實(shí)例。prototype
原型模式,每次從容器中請(qǐng)求Bean時(shí),都會(huì)產(chǎn)生一個(gè)新的實(shí)例。request每一個(gè)HTTP請(qǐng)求都會(huì)有自己的Bean實(shí)例,該作用域只能在基于Web的SpringApplicationContext中使用。session每一個(gè)HTTPsession請(qǐng)求都會(huì)有自己的Bean實(shí)例,該作用域只能在基于Web的SpringApplicationContext中使用。globalsession限定一個(gè)Bean的作用域?yàn)閃eb應(yīng)用(HTTPsession)的生命周期,只有在Web應(yīng)用中使用Spring時(shí),該作用域才有效。
Spring中Bean的作用域41singleton與prototype區(qū)別:示例新實(shí)例getBean()getBean()getBean()新實(shí)例新實(shí)例<beanid="user"
class="cn.pojo.User"
scope="prototype"/>示例<beanid="user"
class="cn.pojo.User"
scope="singleton"/>
在Spring配置文件中,可以使用<bean>元素的scope屬性,將Bean的作用域定義成singleton。singleton作用域42
singleton是Spring容器默認(rèn)的作用域,當(dāng)Bean的作用域?yàn)閟ingleton時(shí),Spring容器就只會(huì)存在一個(gè)共享的Bean實(shí)例。singleton作用域?qū)τ跓o(wú)會(huì)話狀態(tài)的Bean(如Dao組件、Service組件)來(lái)說(shuō),是最理想的選擇。例如:<beanid="scope"class="com.test.scope.Scope"scope="singleton"/>
在Spring中如何配置singleton作用域?
在Spring配置文件中,同樣使用<bean>元素的scope屬性,將Bean的作用域定義成prototype。prototype作用域43
對(duì)需要保持會(huì)話狀態(tài)的Bean(如Struts2的Action類)應(yīng)該使用prototype作用域。在使用prototype作用域時(shí),Spring容器會(huì)為每個(gè)對(duì)該Be
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025下半年四川省廣安市廣安區(qū)“小平故里英才”引進(jìn)29人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年四川省事業(yè)單位招聘預(yù)約歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上海市道路運(yùn)輸事業(yè)發(fā)展中心自主招聘工作人員4人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年陜西省咸陽(yáng)市事業(yè)單位考試招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年江蘇省南通通州灣示范區(qū)事業(yè)單位招聘5人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川省資陽(yáng)事業(yè)單位招聘歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川涼山美姑縣事業(yè)單位招聘工作人員49人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年事業(yè)單位聯(lián)考云南省曲靖市招聘(547人)高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年度廢紙回收與環(huán)保再生資源開(kāi)發(fā)合同
- 2025年度城市公園綠地工程補(bǔ)充協(xié)議書(shū)3篇
- GB/T 22544-2008蛋雞復(fù)合預(yù)混合飼料
- GB/T 12224-2015鋼制閥門(mén)一般要求
- 拒絕毒品珍愛(ài)生命
- GCP-試題含答案及答案2020版
- 特殊焊接作業(yè) 安全要求
- 內(nèi)鏡下鈦夾止血治療課件
- 小學(xué)生血液知識(shí)講座課件
- 變壓器安裝施工工藝-課件
- 一年級(jí)語(yǔ)文上冊(cè)新教材教法講座培訓(xùn)課件
- 保護(hù)投退申請(qǐng)單、登記簿1
- 鉆孔樁鉆孔施工記錄
評(píng)論
0/150
提交評(píng)論