版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3第七章SpringIOC項目需求背景知識項目介紹經(jīng)典問題強化本章小結(jié)0102030405-理解依賴注入的概念-理解IOC與DI的區(qū)別與聯(lián)系-掌握依賴注入的實現(xiàn)方式-了解SpringBean的常用屬性及其子元素-掌握實例化SpringBean的三種方式-掌握SpringBean的作用域-熟悉SpringBean的生命周期-掌握SpringBean的四種裝配方式0102030405060708E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3項目需求01功能描述1.1為滿足用戶需求,我們需要開發(fā)一個新建用戶的功能,在創(chuàng)建用戶時可以填寫相關(guān)信息,包括用戶名、密碼、聯(lián)系電話等。同時,還需要設(shè)置激活狀態(tài),默認(rèn)為開啟。當(dāng)用戶創(chuàng)建完成后,處于激活狀態(tài)的用戶可以直接登錄系統(tǒng)。E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3背景知識02知識導(dǎo)圖2.1圖1
第7章知識導(dǎo)圖反射機制——反射機制概述2.2Java反射主要通過包java.lang.reflect.*來實現(xiàn),它提供了一組類和接口用于在程序運行時獲取目標(biāo)類、接口、字段、方法及構(gòu)造方法等信息,并可以在程序運行時動態(tài)地創(chuàng)建、操作和銷毀它們。例如:反射機制——反射機制的優(yōu)點與缺點2.2優(yōu)點:(1)動態(tài)性:反射機制可以在程序運行時動態(tài)創(chuàng)建對象、調(diào)用方法和訪問屬性,提高程序的靈活性。(2)可擴展性:反射機制允許開發(fā)者在運行時加載任意類的任意版本,以實現(xiàn)程序的動態(tài)擴展和更新。(3)動態(tài)代理:反射機制可以使程序在運行時動態(tài)生成代理類,從而實現(xiàn)動態(tài)代理。(4)框架支持:反射機制為很多框架(例如Spring、Mybatis)的實現(xiàn)提供了技術(shù)基礎(chǔ)。缺點:(1)性能問題:反射需要在程序運行時動態(tài)對代碼進(jìn)行分析和解析,因此通常比直接調(diào)用方法和訪問屬性要慢。(2)安全性問題:反射機制可以訪問類的私有成員,破壞了面向?qū)ο蟮姆庋b性,因此需要謹(jǐn)慎使用。(3)復(fù)雜性問題:Java反射機制的使用需要調(diào)用大量API,以致程序的可讀性和可維護性會受到影響。反射機制——反射機制在Spring中的運用2.2(1)依賴注入(DependencyInjection):在Spring中,DI是通過反射機制實現(xiàn)的。Spring容器會掃描應(yīng)用程序中的類,找到需要注入依賴的地方,并使用反射機制實例化需要注入的對象。(2)AOP(Aspect-OrientedProgramming):Spring的AOP模塊使用反射機制來攔截方法調(diào)用,并在方法調(diào)用前、調(diào)用后或拋出異常時執(zhí)行特定操作。(3)動態(tài)代理(DynamicProxy):Spring的AOP模塊還使用反射機制創(chuàng)建動態(tài)代理。動態(tài)代理是一種在運行時動態(tài)生成代理對象的機制,它通過實現(xiàn)特定的接口來代理原始對象的方法調(diào)用。Spring使用反射來創(chuàng)建這種代理,從而可以在運行時攔截和處理方法調(diào)用。(4)配置文件解析:Spring使用反射機制來解析XML或注解配置文件,并根據(jù)配置文件中的信息創(chuàng)建對應(yīng)的對象。單例設(shè)計模式——單例模式概述2.3單例模式(SingletonPattern)是Java中最常用的創(chuàng)建型設(shè)計模式之一,它提供了一種創(chuàng)建對象的最佳方式,該模式涉及到一個單一的類,該類負(fù)責(zé)創(chuàng)建自己的對象,同時確保只有單個對象被創(chuàng)建。該類還提供了一種直接訪問其唯一對象的方式,而不需要實例化該類對象。
單例設(shè)計模式——單例模式的應(yīng)用場景2.3(1)日志類:日志類可以使用單例模式實現(xiàn),通常在應(yīng)用程序的各個組件中提供全局日志的訪問點,這樣就無需在每次執(zhí)行日志操作時去創(chuàng)建日志對象。(2)配置類:配置類也可以設(shè)計為單例實現(xiàn),例如應(yīng)用程序的配置文件由一個單例對象進(jìn)行統(tǒng)一管理,程序的其他組件就可以通過該對象讀取配置信息,從而簡化在復(fù)雜環(huán)境下的配置管理。(3)工廠類:可以將工廠對象的創(chuàng)建設(shè)計為單例模式,在全局狀態(tài)下始終只有一個工廠對象存在,從而避免高并發(fā)場景下唯一對象被實例化多次的情況。(4)以共享模式訪問資源的類:在實際開發(fā)中,某些需要共享訪問的資源也可以設(shè)計為單例模式。單例設(shè)計模式——餓漢式單例2.3餓漢式單例實現(xiàn)方式是在類加載的時候就創(chuàng)建實例,并將實例保存在一個靜態(tài)常量中。上述代碼中由于加入了static關(guān)鍵字,根據(jù)JVM特性,該類在加載時就會完成Singleton的實例化,從而保證后面的線程在訪問這個實例時得到的都是單例。但由于程序啟動時所有單例就被創(chuàng)建好了,因此當(dāng)單例對象較多時會浪費一定的內(nèi)存。單例設(shè)計模式——懶漢式單例2.3懶漢式單例是另外一種單例實現(xiàn)方式,它會延遲創(chuàng)建實例,直到調(diào)用者第一次訪問該實例時才會被創(chuàng)建。當(dāng)程序執(zhí)行時如果有多個線程同時訪問getInstance()方法,由于此時instance實例為空,因此這些線程都會執(zhí)行instance=newSingleton2()代碼,從而導(dǎo)致多個實例被創(chuàng)建,以致出現(xiàn)線程不安全問題。為了解決這個問題,我們可以使用雙重檢測方式來創(chuàng)建單例。單例設(shè)計模式——雙重檢測2.3雙重檢測鎖定(Double-checkedlocking)是實際開發(fā)中最常用的一種單例實現(xiàn)方式,它通過加鎖的方式保證了線程安全性。當(dāng)程序執(zhí)行時如果有多個線程同時訪問getInstance()方法,由于此時instance實例為空,因此這些線程都會執(zhí)行instance=newSingleton2()代碼,從而導(dǎo)致多個實例被創(chuàng)建,以致出現(xiàn)線程不安全問題。為了解決這個問題,我們可以使用雙重檢測方式來創(chuàng)建單例。
單例設(shè)計模式——優(yōu)缺點2.3優(yōu)點:(1)單例模式降低了系統(tǒng)中實例數(shù)量,提高了系統(tǒng)的可維護性。(2)單例模式創(chuàng)建出的唯一實例可以被其他對象復(fù)用和共享,提高了代碼的復(fù)用性。(3)由于單例模式只會創(chuàng)建一個實例,這樣可以減少不必要的資源消耗,例如在創(chuàng)建和銷毀對象時所需的資源與時間成本。缺點:(1)由于單例模式只有一個實例,如果該實例中的狀態(tài)被多個對象共享和修改,可能會導(dǎo)致對象狀態(tài)的不一致。(2)單例模式需要保證只有一個實例,因此在多線程環(huán)境下需要使用特殊的處理方式來保證實例的唯一性,這可能會導(dǎo)致代碼的復(fù)雜性增加。(3)由于單例模式的實例化過程是在類內(nèi)部進(jìn)行的,因此可能會影響系統(tǒng)的擴展性,特別是在需要擴展單例類時,可能會需要修改該類的代碼。
控制反轉(zhuǎn)與依賴注入的概念2.4在傳統(tǒng)模式下,當(dāng)某個Java對象(調(diào)用者)需要調(diào)用另一個Java對象(被調(diào)用者,即被依賴對象)時,首先會通過“new被調(diào)用者”的方式來創(chuàng)建對象(如下圖所示),這種方式會導(dǎo)致調(diào)用者與被調(diào)用者之間的耦合度增加,不利于項目后期的擴展和維護。
控制反轉(zhuǎn)與依賴注入的概念2.4在使用Spring框架之后,對象的實例不再由調(diào)用者來創(chuàng)建,而是由Spring容器來創(chuàng)建,當(dāng)調(diào)用者需要使用被調(diào)用者時直接從Spring容器中獲取就可以。這樣對象的控制權(quán)就由開發(fā)者的手動創(chuàng)建轉(zhuǎn)移到了Spring容器,控制權(quán)發(fā)生了反轉(zhuǎn),這就是Spring的控制反轉(zhuǎn)。另外,從Spring容器的角度來看,在調(diào)用者需要使用被調(diào)用者時,Spring容器會將被調(diào)用者對象從容器中取出,并賦值給調(diào)用者的成員變量,這相當(dāng)于為調(diào)用者注入了它所依賴的實例,這就是Spring的依賴注入。依賴注入的實現(xiàn)方式——屬性setter方法注入2.5屬性setter方法注入是指IOC容器使用setter方法注入被依賴的實例。通過調(diào)用無參構(gòu)造器或無參靜態(tài)工廠方法實例化Bean后,調(diào)用該Bean的setter方法,即可實現(xiàn)基于setter方法的依賴注入。spring配置文件:appIicationContext.xmlUserServiceImpl.java依賴注入的實現(xiàn)方式——構(gòu)造方法注入2.5構(gòu)造方法注入是指loC容器使用構(gòu)造方法注入被依賴的實例。此種方式通過調(diào)用帶參數(shù)的構(gòu)造方法來實現(xiàn),每個參數(shù)都代表一個依賴。UserServiceImpl.javaspring配置文件:appIicationContext.xmlSpringIOC容器2.52、ApplicationContextApplicationContext是BeanFactory的子接口,也被稱為應(yīng)用上下文,它不僅包含了BeanFactory的所有功能,還添加了對國際化、資源訪問、事件傳播等方面的支持。與BeanFactory不同的是,ApplicationContext實例化后會自動對所有的單例Bean進(jìn)行實例化并配置它們之間的依賴關(guān)系。由于ApplicationContext接口功能更為強大,因此在絕大多數(shù)場景下,都會使用ApplicationContext作為SpringIOC容器。ApplicationContext接口可以通過以下兩種方式完成實例化:(1)通過ClassPathXmlApplicationContext類完成實例化(推薦使用)ClassPathXmlApplicationContext類會從類路徑classPath中尋找并加載指定的XML配置文件,以完成ApplicationContext的實例化。SpringIOC容器2.5(2)通過FileSystemXmlApplicationContext類完成實例化。FileSystemXmlApplicationContext類會從指定的文件系統(tǒng)路徑(絕對路徑)中尋找并加載對應(yīng)的XML配置文件,以完成ApplicationContext的實例化如果不指定絕對路徑,F(xiàn)ileSystemXmlApplicationContext將嘗試在當(dāng)前工作目錄中查找指定的配置文件。然而這種方式可能會導(dǎo)致程序的靈活性變差,因為當(dāng)前工作目錄可能因環(huán)境變化而改變,從而導(dǎo)致無法正確找到配置文件。因此,推薦使用ClassPathXmlApplicationContext來從類路徑中加載配置文件,這樣可以確保配置文件始終可以被正確加載。SpringBean的配置及常用屬性2.6Spring的核心組成部分是IOC容器,它可以創(chuàng)建、存儲和管理SpringBean。為了使用IOC容器,開發(fā)者需要對Spring配置文件進(jìn)行配置,其支持XML和Properties兩種格式的配置文件,其中XML格式最為常用,開發(fā)者可以通過編寫XML配置文件來注冊管理Bean之間的依賴關(guān)系。XML配置文件中,<bean>元素是最重要的元素之一,它用于描述一個Bean的定義和配置。屬性說明idBean的唯一標(biāo)識符,通過id屬性來標(biāo)識Bean的名稱。在Spring容器中,可以通過該名稱獲取對應(yīng)的Bean實例。id屬性是必須屬性。classBean的類全名,用于告訴Spring容器該Bean的實現(xiàn)類是什么。在運行時,Spring容器會根據(jù)該類全名來創(chuàng)建Bean實例。class屬性是必須屬性。scopeBean的作用范圍,用于指定Bean的生命周期和可見范圍。常用的作用域有singleton、prototype、request、session、globalsession等。默認(rèn)作用域是singleton(單例)。init-methodBean初始化時調(diào)用的方法。該方法必須是Bean實現(xiàn)類中的一個方法,并且不帶任何參數(shù)。destroy-methodBean銷毀時調(diào)用的方法。該方法必須是Bean實現(xiàn)類中的一個方法,并且不帶任何參數(shù)。lazy-init延遲加載,用于指定是否在第一次使用Bean時才進(jìn)行實例化。如果將該屬性設(shè)置為true,表示該Bean將在第一次使用時才被實例化。autowire自動裝配模式,用于指定如何自動裝配該Bean的依賴。常用的自動裝配模式有byName、byType、constructor等。默認(rèn)情況下,Spring不會自動裝配Bean的依賴。depends-on依賴的Bean名稱,用于指定該Bean依賴的其他Bean。如果該屬性存在,Spring會先創(chuàng)建指定的Bean,再創(chuàng)建當(dāng)前Bean。factory-method工廠方法名稱,用于通過工廠方法來創(chuàng)建Bean。如果Bean的實例化過程比較復(fù)雜,可以使用工廠方法來創(chuàng)建Bean實例。factory-bean工廠Bean的名稱,用于指定使用哪個Bean作為工廠來創(chuàng)建Bean。如果Bean是由其他Bean創(chuàng)建的,可以使用該屬性來指定使用哪個Bean作為工廠。SpringBean的實例化2.7構(gòu)造器實例化靜態(tài)工廠方式實例化實例工廠方式實例化SpringBean的實例化——構(gòu)造器實例化2.7構(gòu)造器實例化是指Spring容器通過Bean對應(yīng)類中默認(rèn)的無參構(gòu)造方法來實例化Bean。如果類中包含含參的構(gòu)造方法,則一定要顯示地聲明無參構(gòu)造方法,否則會因為類中沒有無參數(shù)構(gòu)造方法而報錯。User.javaspring配置文件:appIicationContext.xmlSpringBean的實例化——靜態(tài)工廠實例化2.7靜態(tài)工廠是實例化SpringBean的另一種方式,該方式要求創(chuàng)建一個靜態(tài)工廠方法來實現(xiàn)Bean的實例化。配置文件中<bean>元素的class屬性所指定的不再是Bean實例的實現(xiàn)類,而是靜態(tài)工廠類,同時還需要使用factory-method屬性來指定靜態(tài)工廠中創(chuàng)建Bean的方法。User.java添加含參構(gòu)造方法創(chuàng)建靜態(tài)工廠StaticUserFactory類用來生成User類的對象在applicationContext.xml文件中通過靜態(tài)工廠方法來配置SpringBeanSpringBean的實例化——實例工廠實例化2.7此種方式的工廠類中,不再使用靜態(tài)方法創(chuàng)建Bean實例,而是直接創(chuàng)建Bean對象。同時在配置文件中,需要實例化的Bean也不是通過class屬性直接指向,而是通過factory-bean屬性指向配置的實例工廠,然后使用factory-method屬性確定使用工廠中的哪個方法。創(chuàng)建實例工廠類UserFactory在applicationContext.xml中配置實例工廠
SpringBean的作用域2.8SpringBean的作用域(Scope)是指Bean實例在應(yīng)用中的生命周期和可見范圍。Spring容器提供多種不同的作用域,每種作用域都有不同的生命周期和可見范圍,開發(fā)者可以根據(jù)自己的需求選擇適合的作用域。在使用時只需在<beanscope=”...”>中指定具體的作用域即可作用域描述singleton(單例)Spring容器中只會創(chuàng)建一個Bean實例,所有請求該Bean的對象都會共享同一個實例。prototype(原型)每次請求Bean時,Spring容器都會創(chuàng)建一個新的Bean實例。每個請求都會獲得一個獨立的Bean實例。request(請求)每個HTTP請求都會創(chuàng)建一個新的Bean實例,該實例僅在當(dāng)前請求的范圍內(nèi)有效。不同的請求將獲得不同的Bean實例。session(會話)每個HTTP會話都會創(chuàng)建一個新的Bean實例,該實例僅在當(dāng)前會話的范圍內(nèi)有效。同一會話內(nèi)的不同請求將共享同一個Bean實例。globalsession(全局會話)僅適用于基于portlet的Web應(yīng)用,全局會話作用域僅在具有多個portlet的Web應(yīng)用程序中才有意義。通常情況下,它與普通的HTTP會話作用域相同。
SpringBean的生命周期2.9Spring容器按照自身的方法(doCreateBean方法)將SpringBean的生命周期劃分為實例化、屬性賦值、初始化、銷毀等四個階段。
SpringBean的裝配方式2.10SpringBean的裝配可以理解為依賴關(guān)系注入,Bean的裝配方式即Bean依賴注入的方式。Spring容器支持多種形式的裝配方式,主要包括:基于XML的裝配基于JavaConfig配置bean基于注解的裝配自動裝配
SpringBean的裝配方式——基于XML的裝配2.10Spring提供兩種基于XML的裝配方式:設(shè)值注入和構(gòu)造注入。在Spring實例化Bean的過程中,Spring首先會調(diào)用Bean的默認(rèn)構(gòu)造方法來實例化Bean對象,然后通過反射的方式調(diào)用setter方法來注入屬性值。因此,設(shè)值注入要求一個Bean必須滿足以下兩點要求:?Bean類必須提供一個默認(rèn)的無參構(gòu)造方法。?Bean類必須為需要注入的屬性提供對應(yīng)的setter方法。使用設(shè)值注入時,需要在Spring配置文件中使用<bean>元素的子元素<property>來為每個屬性設(shè)置注入值。而使用構(gòu)造注入時,需要使用<bean>元素的子元素<constructor-arg>來定義構(gòu)造方法的參數(shù),同時使用其value屬性(或子元素)設(shè)置該參數(shù)的值。示例:“第7章springIOC\代碼\07基于XML的裝配\spring_ioc”
SpringBean的裝配方式——基于JavaConfig配置bean2.10在Spring框架中,開發(fā)者還可以使用JavaConfig方式配置Bean。JavaConfig是從Spring3.0開始提供的一種配置Bean的方式,它使用Java代碼定義和配置Bean,以避免配置XML文件而帶來的繁瑣和復(fù)雜。JavaConfig的應(yīng)用需要使用@Configuration注解標(biāo)記一個Java配置類(可以替換applicationContext.xml),該類利用@Bean注解聲明SpringBean,被聲明的Bean會在Spring容器啟動時被自動創(chuàng)建并放入容器中,以供其它組件使用。示例:“第7章springIOC\代碼\08通過JavaConfig配置bean”
SpringBean的裝配方式——基于注解的裝配2.10為了進(jìn)一步簡化SpringBean的裝配方式,踐行“約定大于配置”的思想,Spring還提供了基于注解的裝配方式。注解(Annotation)是在計算機程序中添加的一種元數(shù)據(jù),用于為代碼元素(例如類、方法、變量等)提供補充說明或標(biāo)記特定屬性或行為。它們以@符號開頭,通常放置在代碼元素的前面,以便在編譯時或運行時被解釋和處理。它是Java語言的一個強大特性,可以用于很多場景,如為代碼添加文檔、進(jìn)行代碼檢查、指定依賴項、標(biāo)記測試用例等。在Spring框架中,注解可以使開發(fā)者無需手動配置每個Bean之間的依賴關(guān)系,而是通過在類、字段、構(gòu)造函數(shù)等位置添加特定的注解,Spring框架就可以自動掃描并創(chuàng)建和裝配Bean,從而避免手動編寫大量配置文件帶來的麻煩。
SpringBean的裝配方式——基于注解的裝配2.10注解作用@Autowired自動裝配Bean依賴@Component通用組件掃描注解@Controller聲明控制器類@Repository聲明數(shù)據(jù)訪問層類@Service聲明服務(wù)層類@Configuration定義配置類@Bean定義Bean對象@Value注入配置屬性值@Qualifier指定Bean名稱@Scope指定Bean作用域@PostConstruct在Bean初始化后執(zhí)行方法@PreDestroy在Bean銷毀前執(zhí)行方法@RequestMapping定義控制器請求映射@PathVariable獲取請求路徑中的參數(shù)@RequestParam獲取請求參數(shù)@ResponseBody響應(yīng)請求結(jié)果@ResponseStatus定義響應(yīng)狀態(tài)碼@ExceptionHandler處理控制器方法中的異常@Transactional聲明事務(wù)示例:“第7章springIOC\代碼\09基于注解的裝配\spring_ioc”
SpringBean的裝配方式——自動裝配2.10在Spring框架中,自動裝配(autowiring)是指將一個Bean自動注入到其他Bean的屬性中,以實現(xiàn)它們之間的依賴關(guān)系。Spring框架提供了多種自動裝配的方式,例如:在XML配置文件中,可以使用<bean>元素的autowire屬性來指定自動裝配的方式,如byName、byType等。在注解方式中,可以使用@Autowired、@Resource等注解來實現(xiàn)自動裝配。在JavaConfig配置中,可以使用@Configuration和@Bean注解來指定自動裝配的方式。自動裝配的好處在于它可以讓開發(fā)人員更加便捷地組合Bean,以減少手動配置的工作量,同時也避免因配置錯誤而引起的潛在問題。然而需要注意的是,在使用自動裝配時,應(yīng)注意Bean的命名規(guī)范和類型匹配,以避免出現(xiàn)不必要的錯誤。
SpringBean的裝配方式——Spring自動裝配的方式2.10自動裝配方式特點byName根據(jù)依賴項的名稱進(jìn)行自動裝配。需要依賴項的名稱和屬性名匹配。byType根據(jù)依賴項的類型進(jìn)行自動裝配。如果容器中存在多個與屬性類型匹配的bean,則會拋出異常。constructor通過構(gòu)造函數(shù)進(jìn)行自動裝配。會根據(jù)構(gòu)造函數(shù)參數(shù)的類型和名稱來匹配依賴項。autodetect默認(rèn)方式,先嘗試按byType自動裝配,如果找不到再嘗試按byName自動裝配。需要注意的是,在使用byName和byType進(jìn)行自動裝配時,需要在依賴項上添加@Autowired注解,而使用constructor自動裝配時,則不需要添加注解。此外,還可以使用@Qualifier注解來指定具體的依賴項名稱,以避免裝配時的歧義。E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3項目實現(xiàn)——用戶新建功能03項目整體結(jié)構(gòu)3.1mapper目錄:該目錄下存放了DAO層實現(xiàn),包含了UserMapper接口以及對應(yīng)的UserMapper.xml文件,用于實現(xiàn)對用戶數(shù)據(jù)的增刪改查等操作。pojo目錄:該目錄下存放了實體類,主要有User用戶類,用于描述用戶的各個屬性。service目錄:該目錄下包含了業(yè)務(wù)層接口及其實現(xiàn)類,分別為IUserService和IUserServiceImpl,用于定義和實現(xiàn)與用戶相關(guān)的業(yè)務(wù)邏輯。resources目錄:該目錄下包含了配置文件,這里包含了MyBatis和Spring的配置文件,用于配置數(shù)據(jù)庫連接、Mapper掃描等相關(guān)信息。test目錄:該目錄下包含了DAO層和Service層的測試類,這些測試類都繼承了BaseTest類,用于測試相關(guān)類的正確性和可靠性。pom.xml:是Maven項目的核心配置文件,用于管理項目所需的依賴包和其他配置信息項目實現(xiàn)步驟3.2導(dǎo)入項目依賴包創(chuàng)建User類配置MybatisSpring整合Mybatis配置業(yè)務(wù)層Springbean的包掃描路徑數(shù)據(jù)訪問接口層(Dao)接口及實現(xiàn)業(yè)務(wù)層(Service)接口及實現(xiàn)測試類編寫E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3經(jīng)典問題強化04經(jīng)典問題強化4.11、哪種依賴注入方式建議使用,是構(gòu)造器注入,還是Setter方法注入?對于選擇使用哪種依賴注入方式,可以根據(jù)具體的需求和場景進(jìn)行選擇。一般來說,如果依賴項是必需的,或者對于一個對象只需要進(jìn)行一次性注入,那么構(gòu)造方法注入可能是更好的選擇。如果依賴項是可選的,或者需要在對象實例化后動態(tài)更改依賴項,那么Setter方法注入可能更合適。同時,也可以混合使用兩種方式來實現(xiàn)依賴注入,以達(dá)到更好的靈活性和可維護性。經(jīng)典問題強化4.12、Spring框架中的單例Bean是線程安全的么?在Spring框架中,單例Bean是線程安全的,這是因為Spring容器會為每個單例Bean創(chuàng)建
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年消防通風(fēng)施工項目合作合同版B版
- 美容院香薰師聘用合同模板
- 高速公路照明系統(tǒng)線路施工合同
- 臨時人力資源專員聘用合同模板
- 臨時工聘用合同簽訂要點
- 保健品公司甲方代表招聘協(xié)議
- 棒球場個人車位租賃合同范本
- 居民社區(qū)背景音樂廣播安裝合同
- 環(huán)保企業(yè)聘用合同違約金上限
- 二手車市場地坪漆施工協(xié)議
- 一方出資金一方出資源合作協(xié)議范本
- 兔的飼養(yǎng)管理與疾病防治
- 基于單元的小學(xué)語文學(xué)習(xí)任務(wù)群設(shè)計案例
- 產(chǎn)品報價單(5篇)
- 2023年江蘇省南通市中考英語試題(含答案解析)
- 外科穿手術(shù)衣PPT參考幻燈片
- 浙江省護士執(zhí)業(yè)注冊健康體檢表
- 發(fā)貨員崗位安全操作規(guī)程
- 《員工培訓(xùn)與開發(fā)》考試復(fù)習(xí)題庫(含答案)
- 創(chuàng)新思維與創(chuàng)業(yè)實驗-東南大學(xué)中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 大學(xué)生心理健康與發(fā)展學(xué)習(xí)通課后章節(jié)答案期末考試題庫2023年
評論
0/150
提交評論