国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Spring Framework 參考文檔(聲明式基于注解的緩存)

makeFoxPlay / 3666人閱讀

摘要:聲明式基于注解的緩存對于緩存聲明,的緩存抽象提供了一組注解觸發(fā)緩存人口。重新組合要應(yīng)用于方法的多個緩存操作。雖然在大多數(shù)情況下,只聲明一個緩存,但是注解允許指定多個名稱,以便使用多個緩存。

聲明式基于注解的緩存

對于緩存聲明,Spring的緩存抽象提供了一組Java注解:

@Cacheable:觸發(fā)緩存人口。

@CacheEvict:觸發(fā)緩存驅(qū)逐。

@CachePut:在不影響方法執(zhí)行的情況下更新緩存。

@Caching:重新組合要應(yīng)用于方法的多個緩存操作。

@CacheConfig:在類級別上共享一些常見的緩存相關(guān)設(shè)置。

@Cacheable注解

顧名思義,你可以使用@Cacheable來劃分可緩存的方法 — 也就是說,將結(jié)果存儲在緩存中的方法,以便在后續(xù)調(diào)用(具有相同的參數(shù))時返回緩存中的值,而不必實際執(zhí)行該方法。在其最簡單的形式中,注解聲明需要與帶注解的方法相關(guān)聯(lián)的緩存的名稱,如下面的示例所示:

@Cacheable("books")
public Book findBook(ISBN isbn) {...}

在前面的代碼片段中,findBook方法與名為books的緩存相關(guān)聯(lián),每次調(diào)用該方法時,都會檢查緩存,以查看是否已經(jīng)執(zhí)行了調(diào)用,并且不需要重復(fù)調(diào)用。雖然在大多數(shù)情況下,只聲明一個緩存,但是注解允許指定多個名稱,以便使用多個緩存。在本例中,在執(zhí)行方法之前檢查每個緩存 — 如果至少命中一個緩存,則返回關(guān)聯(lián)的值。

所有其他不包含該值的緩存也會被更新,即使緩存的方法并沒有實際執(zhí)行。

下面的示例在findBook方法上使用@Cacheable

@Cacheable({"books", "isbns"})
public Book findBook(ISBN isbn) {...}
默認(rèn)鍵生成

由于緩存本質(zhì)上是鍵值存儲,因此每次對緩存方法的調(diào)用都需要轉(zhuǎn)換為適合緩存訪問的鍵,緩存抽象使用基于以下算法的簡單KeyGenerator

如果沒有提供參數(shù),則返回SimpleKey.EMPTY

如果只給出一個參數(shù),則返回該實例。

如果給定多個參數(shù),則返回包含所有參數(shù)的SimpleKey

這種方法適用于大多數(shù)用例,只要參數(shù)具有自然鍵并實現(xiàn)有效的hashCode()equals()方法,如果不是這樣,你需要改變策略。

要提供不同的默認(rèn)鍵生成器,你需要實現(xiàn)org.springframework.cache.interceptor.KeyGenerator接口。

默認(rèn)的鍵生成策略隨著Spring 4.0的發(fā)布而改變,Spring的早期版本使用的鍵生成策略,對于多個鍵參數(shù),只考慮參數(shù)的hashCode(),而不考慮equals(),這可能會導(dǎo)致意想不到的鍵沖突(有關(guān)背景,請參見SPR-10237),新的SimpleKeyGenerator為這些場景使用復(fù)合鍵。

如果你想繼續(xù)使用前面的鍵策略,可以配置已廢棄的org.springframework.cache.interceptor.DefaultKeyGenerator類,或者創(chuàng)建一個基于散列的自定義KeyGenerator實現(xiàn)。

自定義鍵生成聲明

由于緩存是通用的,因此目標(biāo)方法很可能具有各種簽名,這些簽名無法輕松映射到緩存結(jié)構(gòu)之上,當(dāng)目標(biāo)方法有多個參數(shù)時,這往往會變得明顯,其中只有一些參數(shù)適用于緩存(其余參數(shù)僅由方法邏輯使用),請考慮以下示例:

@Cacheable("books")
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)

乍一看,雖然兩個boolean參數(shù)影響了書的發(fā)現(xiàn)方式,但它們對緩存沒有用處,如果兩個中只有一個重要而另一個不重要怎么辦?

對于這種情況,@Cacheable注解允許你通過其key屬性指定鍵的生成方式,你可以使用SpEL選擇感興趣的參數(shù)(或其嵌套屬性),執(zhí)行操作,甚至調(diào)用任意方法,而無需編寫任何代碼或?qū)崿F(xiàn)任何接口。這是默認(rèn)生成器的推薦方法,因為隨著代碼庫的增長,簽名方法往往會有很大不同,雖然默認(rèn)策略可能適用于某些方法,但它很少適用于所有方法。

以下示例是各種SpEL聲明:

@Cacheable(cacheNames="books", key="#isbn")
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)

@Cacheable(cacheNames="books", key="#isbn.rawNumber")
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)

@Cacheable(cacheNames="books", key="T(someType).hash(#isbn)")
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)

前面的代碼片段顯示了選擇某個參數(shù)、其屬性之一、甚至是任意(靜態(tài))方法是多么容易。

如果負(fù)責(zé)生成鍵的算法太具體或需要共享,則可以在操作上定義自定義keyGenerator,為此,請指定要使用的KeyGenerator bean實現(xiàn)的名稱,如以下示例所示:

@Cacheable(cacheNames="books", keyGenerator="myKeyGenerator")
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)
keykeyGenerator參數(shù)是互斥的,一個操作指定兩者會導(dǎo)致異常。
默認(rèn)的緩存解析

緩存抽象使用簡單的CacheResolver,它使用配置的CacheManager檢索在操作級別定義的緩存。

要提供不同的默認(rèn)緩存解析器,你需要實現(xiàn)org.springframework.cache.interceptor.CacheResolver接口。

自定義緩存解析

默認(rèn)緩存解析非常適合使用單個CacheManager并且沒有復(fù)雜緩存解析要求的應(yīng)用程序。

對于使用多個緩存管理器的應(yīng)用程序,可以將cacheManager設(shè)置為用于每個操作,如以下示例所示:

@Cacheable(cacheNames="books", cacheManager="anotherCacheManager") 
public Book findBook(ISBN isbn) {...}

你也可以完全替換CacheResolver,方式類似于替換鍵生成,為每個緩存操作請求解析,讓實現(xiàn)實際上根據(jù)運行時參數(shù)解析要使用的緩存,以下示例顯示如何指定CacheResolver

@Cacheable(cacheResolver="runtimeCacheResolver") 
public Book findBook(ISBN isbn) {...}
從Spring 4.1開始,緩存注解的value屬性不再是必需的,因為無論注解的內(nèi)容如何,??CacheResolver都可以提供此特定信息。

keykeyGenerator類似,cacheManagercacheResolver參數(shù)是互斥的,指定這兩者的操作會導(dǎo)致異常,因為CacheResolver實現(xiàn)忽略了自定義CacheManager,這可能不是你所期望的。

同步緩存

在多線程環(huán)境中,可能會為同一參數(shù)同時調(diào)用某些操作(通常在啟動時),默認(rèn)情況下,緩存抽象不會鎖定任何內(nèi)容,并且可能會多次計算相同的值,從而無法實現(xiàn)緩存。

對于這些特定情況,你可以使用sync屬性指示底層緩存提供程序在計算值時鎖定緩存條目,因此,只有一個線程忙于計算該值,而其他線程則被阻塞,直到該條目在緩存中更新為止,以下示例顯示了如何使用sync屬性:

@Cacheable(cacheNames="foos", sync=true) 
public Foo executeExpensiveOperation(String id) {...}
這是一項可選功能,你最喜歡的緩存庫可能不支持它,核心框架提供的所有CacheManager實現(xiàn)都支持它,有關(guān)更多詳細(xì)信息,請參閱緩存提供程序的文檔。
條件緩存

有時,方法可能不適合一直緩存(例如,它可能取決于給定的參數(shù)),緩存注解通過condition參數(shù)支持此類功能,該參數(shù)采用被評估為truefalseSpEL表達(dá)式,如果為true,則緩存該方法,如果沒有,它的行為就好像該方法沒有被緩存(也就是說,無論緩存中的值是什么,或者使用了什么參數(shù),每次都執(zhí)行該方法)。例如,僅當(dāng)參數(shù)name的長度小于32時,才會緩存以下方法:

@Cacheable(cacheNames="book", condition="#name.length() < 32") 
public Book findBook(String name)

condition參數(shù)外,還可以使用unless參數(shù)否決向緩存添加值,與condition不同,unless表達(dá)式在調(diào)用該方法后進(jìn)行評估,要擴展上一個示例,也許我們只想緩存平裝書,如下例所示:

@Cacheable(cacheNames="book", condition="#name.length() < 32", unless="#result.hardback") 
public Book findBook(String name)

緩存抽象支持java.util.Optional,僅在其存在時將其內(nèi)容用作緩存值,#result總是引用業(yè)務(wù)實體而從不支持包裝器,因此前面的示例可以重寫如下:

@Cacheable(cacheNames="book", condition="#name.length() < 32", unless="#result?.hardback")
public Optional findBook(String name)

請注意,result仍然引用Book而不是Optional,由于它可能為null,我們應(yīng)該使用安全導(dǎo)航操作符。

可用的緩存SpEL評估上下文

每個SpEL表達(dá)式都針對專用context進(jìn)行評估,除了內(nèi)置參數(shù)之外,框架還提供專用的與緩存相關(guān)的元數(shù)據(jù),例如參數(shù)名稱。下表描述了上下文可用的項目,以便你可以將它們用于鍵和條件計算:

名稱 位置 描述 示例
methodName 根對象 要調(diào)用的方法的名稱 #root.methodName
method 根對象 正在調(diào)用的方法 #root.method.name
target 根對象 正在調(diào)用的目標(biāo)對象 #root.target
targetClass 根對象 正在調(diào)用的目標(biāo)的類 #root.targetClass
args 根對象 用于調(diào)用目標(biāo)的參數(shù)(作為數(shù)組) #root.args[0]
caches 根對象 執(zhí)行當(dāng)前方法的高速緩存的集合 #root.caches[0].name
參數(shù)名稱 評估上下文 任何方法參數(shù)的名稱;
如果名稱不可用(可能由于沒有調(diào)試信息),
參數(shù)名稱也可以在#a<#arg>下獲得。
其中#arg代表參數(shù)索引(從0開始)。
#iban#a0
(你也可以使用#p0
#p<#arg>表示法作為別名)
result 評估上下文 方法調(diào)用的結(jié)果(要緩存的值)
只能在unless表達(dá)式、緩存放置表達(dá)式(計算鍵)
或緩存逐出表達(dá)式(當(dāng)beforeInvocationfalse
時)中使用
對于受支持的包裝器(例如Optional),
#result引用實際的對象,而不是包裝器。
#result
@CachePut注解

當(dāng)需要更新緩存而不干擾方法執(zhí)行時,可以使用@CachePut注解,也就是說,始終執(zhí)行該方法,并將其結(jié)果放入緩存中(根據(jù)@CachePut選項)。它支持與@Cacheable相同的選項,應(yīng)該用于緩存填充而不是方法流優(yōu)化,以下示例使用@CachePut注解:

@CachePut(cacheNames="book", key="#isbn")
public Book updateBook(ISBN isbn, BookDescriptor descriptor)
通常強烈建議不要在同一方法上使用@CachePut@Cacheable注解,因為它們有不同的行為,雖然后者導(dǎo)致通過使用緩存跳過方法執(zhí)行,但前者強制執(zhí)行以執(zhí)行緩存更新。這將導(dǎo)致意想不到的行為,除了特定的情況外(例如注解具有將它們彼此排除的條件)之外,應(yīng)避免此類聲明。還請注意,這些條件不應(yīng)該依賴于result對象(即#result變量),因為這些都是預(yù)先驗證以確認(rèn)排除的。
@CacheEvict注解

緩存抽象不僅允許緩存存儲的填充,還允許驅(qū)逐,此過程對于從緩存中刪除陳舊或未使用的數(shù)據(jù)非常有用。與@Cacheable相反,@CacheEvict劃分了執(zhí)行緩存逐出的方法(即,用作從緩存中刪除數(shù)據(jù)的觸發(fā)器的方法)。@CacheEvict需要指定受操作影響的一個或多個緩存,允許指定自定義緩存和鍵解析或條件,并具有一個額外的參數(shù)(allEntries),指示是否需要執(zhí)行緩存范圍的驅(qū)逐而不僅僅是條目驅(qū)逐(基于鍵),以下示例逐出books緩存中的所有條目:

@CacheEvict(cacheNames="books", allEntries=true) 
public void loadBooks(InputStream batch)

當(dāng)需要清除整個緩存區(qū)域時,此選項會派上用場,而不是逐出每個條目(這將花費很長時間,因為它是低效的),所有條目在一個操作中被移除,如前面的示例所示。請注意,框架會忽略此方案中指定的任何鍵,因為它不適用(整個緩存被驅(qū)逐,而不僅僅是一個條目)。

你還可以通過使用beforeInvocation屬性指示驅(qū)逐是在方法執(zhí)行之后(默認(rèn))還是在方法執(zhí)行之前進(jìn)行的,前者提供與其他注解相同的語義:方法成功完成后,將執(zhí)行緩存上的操作(在本例中為驅(qū)逐),如果方法未執(zhí)行(因為它可能被緩存)或拋出異常,則不會發(fā)生驅(qū)逐。后者(beforeInvocation=true)導(dǎo)致驅(qū)逐始終在調(diào)用方法之前發(fā)生,這在驅(qū)逐不需要與方法結(jié)果相關(guān)聯(lián)的情況下非常有用。

請注意,void方法可以與@CacheEvict一起使用 — 因為方法充當(dāng)觸發(fā)器,返回值將被忽略(因為它們不與緩存交互),這不是@Cacheable的情況,它將數(shù)據(jù)添加或更新到緩存中,因此需要結(jié)果。

@Caching注解

有時,需要指定相同類型的多個注解(例如@CacheEvict@CachePut),例如,因為條件或鍵表達(dá)式在不同的緩存之間是不同的,@Caching允許在同一方法上使用多個嵌套的@Cacheable @CachePut@CacheEvict注解,以下示例使用兩個@CacheEvict注解:

@Caching(evict = { @CacheEvict("primary"), @CacheEvict(cacheNames="secondary", key="#p0") })
public Book importBooks(String deposit, Date date)
@CacheConfig注解

到目前為止,我們已經(jīng)看到緩存操作提供了許多自定義選項,你可以為每個操作設(shè)置這些選項,但是,如果某些自定義選項適用于該類的所有操作,那么配置它們可能會很麻煩。例如,可以用一個類級別的定義替換指定類的每個緩存操作使用的緩存名稱,這就是@CacheConfig發(fā)揮作用的地方,以下示例使用@CacheConfig設(shè)置緩存的名稱:

@CacheConfig("books") 
public class BookRepositoryImpl implements BookRepository {

    @Cacheable
    public Book findBook(ISBN isbn) {...}
}

@CacheConfig是一個類級注解,允許共享緩存名稱、自定義KeyGenerator、自定義CacheManager和自定義CacheResolver,將此注解放在類上不會打開任何緩存操作。

操作級別自定義始終覆蓋@CacheConfig上的自定義集,因此,這為每個緩存操作提供了三個級別的自定義:

全局配置,可用于CacheManagerKeyGenerator

在類級別,使用@CacheConfig

在操作級別。

啟用緩存注解

請務(wù)必注意,即使聲明緩存注解也不會自動觸發(fā)其操作 — 與Spring中的許多功能一樣,該特性必須以聲明方式啟用(這意味著如果你懷疑緩存是罪魁禍?zhǔn)祝憧梢酝ㄟ^僅刪除一個配置行而不是代碼中的所有注解來禁用它)。

要啟用緩存注解,請將注解@EnableCaching添加到@Configuration類之一:

@Configuration
@EnableCaching
public class AppConfig {
}

或者,對于XML配置,你可以使用cache:annotation-driven元素:



        

cache:annotation-driven元素和@EnableCaching注解都允許你指定各種選項,這些選項影響方式通過AOP將緩存行為添加到應(yīng)用程序,該配置與@Transactional的配置有意類似。

處理緩存注解的默認(rèn)建議模式是proxy,它允許僅通過代理攔截調(diào)用,同一類中的本地調(diào)用不能以這種方式截獲,對于更高級的攔截模式,請考慮結(jié)合編譯時或加載時編織切換到aspectj模式。
有關(guān)實現(xiàn)CachingConfigurer所需的高級自定義(使用Java配置)的更多詳細(xì)信息,請參閱javadoc。
緩存注解設(shè)置
XML屬性 注解屬性 默認(rèn) 描述
cache-manager N/A(參見CachingConfigurer javadoc cacheManager 要使用的緩存管理器的名稱;
使用此緩存管理器(如果未設(shè)置則為cacheManager)在后臺初始化默認(rèn)的CacheResolver
要獲得更精細(xì)的緩存解析管理,請考慮設(shè)置“cache-resolver”屬性。
cache-resolver N/A(參見CachingConfigurer javadoc 使用配置的cacheManagerSimpleCacheResolver 用于解析后備緩存的CacheResolver的bean名稱;
此屬性不是必需的,只需要指定為“cache-manager”屬性的替代。
key-generator N/A(參見CachingConfigurer javadoc SimpleKeyGenerator 要使用的自定義鍵生成器的名稱。
error-handler N/A(參見CachingConfigurer javadoc SimpleCacheErrorHandler 要使用的自定義緩存錯誤處理程序的名稱;
默認(rèn)情況下,在緩存相關(guān)操作期間拋出的任何異常都會在客戶端返回。
mode mode proxy 默認(rèn)模式(proxy)處理要使用Spring的AOP框架代理的帶注解bean(遵循代理語義,如前所述,僅適用于通過代理進(jìn)入的方法調(diào)用);
替代模式(aspectj)用Spring的AspectJ緩存切面編織受影響的類,修改目標(biāo)類字節(jié)碼以應(yīng)用于任何類型的方法調(diào)用;
AspectJ編織需要在類路徑中使用spring-aspects.jar以及啟用加載時編織(或編譯時編織);
(有關(guān)如何設(shè)置加載時編織的詳細(xì)信息,請參閱Spring配置)。
proxy-target-class proxyTargetClass false 僅適用于代理模式;
控制為使用@Cacheable@CacheEvict注解注解的類創(chuàng)建哪種類型的緩存代理;
如果proxy-target-class屬性設(shè)置為true,則創(chuàng)建基于類的代理;
如果proxy-target-classfalse或者省略了該屬性,則會創(chuàng)建基于標(biāo)準(zhǔn)JDK接口的代理;
(有關(guān)不同代理類型的詳細(xì)解釋,請參閱代理機制)。
order order Ordered.LOWEST_PRECEDENCE 定義應(yīng)用于使用@Cacheable@CacheEvict注解的bean的緩存建議的順序;
(有關(guān)排序AOP建議相關(guān)規(guī)則的更多信息,請參閱建議排序);
沒有指定的排序意味著AOP子系統(tǒng)確定建議的順序。
查找@Cacheable/@CachePut/@CacheEvict/@Caching僅在定義它的同一應(yīng)用程序上下文中的bean上進(jìn)行緩存,這意味著,如果你在WebApplicationContext中為DispatcherServlet放置,它只會在你的控制器中檢查bean,而不是你的服務(wù),有關(guān)更多信息,請參閱MVC部分。
方法可見性和緩存注解

使用代理時,應(yīng)僅將緩存注解應(yīng)用于具有公共可見性的方法,如果使用這些注解來注解protectedprivate或包可見方法,不會引發(fā)錯誤,但帶注解的方法不會顯示已配置的緩存設(shè)置。如果需要注解非公共方法,請考慮使用AspectJ(請參閱本節(jié)的其余部分),因為它會更改字節(jié)碼本身。

Spring建議只使用@Cache*注解來注解具體類(以及具體類的方法),而不是注解接口,你當(dāng)然可以將@Cache*注解放在接口(或接口方法)上,但這只能在你使用基于接口的代理時按預(yù)期工作。Java注解不是從接口繼承的事實意味著,如果你使用基于類的代理(proxy-target-class="true")或基于編織的切面(mode="aspectj"),代理和編織基礎(chǔ)設(shè)施無法識別緩存設(shè)置,并且該對象未包裝在緩存代理中。
在代理模式(默認(rèn))下,只攔截通過代理進(jìn)入的外部方法調(diào)用,這意味著自調(diào)用(實際上是目標(biāo)對象中調(diào)用目標(biāo)對象的另一個方法的方法)在運行時不會導(dǎo)致實際的緩存,即使調(diào)用的方法用@Cacheable標(biāo)記,在這種情況下,請考慮使用aspectj模式。此外,必須完全初始化代理以提供預(yù)期的行為,因此你不應(yīng)該在初始化代碼(即@PostConstruct)中依賴此功能。
使用自定義注解
自定義注解和AspectJ

此特性僅適用于基于代理的方法,但可以通過使用AspectJ進(jìn)行一些額外的工作。
spring-aspects模塊僅定義標(biāo)準(zhǔn)注解的切面,如果你已定義自己的注解,則還需要為這些注解定義切面。

緩存抽象允許你使用自己的注解來標(biāo)識觸發(fā)緩存填充或驅(qū)逐的方法,這作為模板機制非常方便,因為它消除了重復(fù)緩存注解聲明的需要,這在指定了鍵或條件或者代碼庫中不允許外部導(dǎo)入(org.springframework)時特別有用。與其他原型注解類似,你可以使用@Cacheable@CachePut@CacheEvict@CacheConfig作為元注解(即可以注解其他注解的注解),在下面的示例中,使用自己的自定義注解替換常見的@Cacheable聲明:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Cacheable(cacheNames="books", key="#isbn")
public @interface SlowService {
}

在前面的示例中,定義了自己的SlowService注解,該注解本身使用@Cacheable進(jìn)行注解,現(xiàn)在我們可以替換以下代碼:

@Cacheable(cacheNames="books", key="#isbn")
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)

以下示例顯示了自定義注解,我們可以使用它來替換前面的代碼:

@SlowService
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)

盡管@SlowService不是Spring注解,但容器會在運行時自動獲取其聲明并理解其含義,請注意,如前所述,需要啟用annotation-driven的行為。

上一篇:理解緩存抽象

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/76135.html

相關(guān)文章

  • Spring Framework 參考文檔(JCache(JSR-107)注解

    摘要:注解從版開始,的緩存抽象完全支持標(biāo)準(zhǔn)注解和以及和。使用方法調(diào)用的結(jié)果更新緩存,要求將其作為使用注解的參數(shù)傳遞給它由于這種差異,允許在實際方法調(diào)用之前或之后更新緩存。非常相似,當(dāng)方法調(diào)用導(dǎo)致異常時,支持條件驅(qū)逐。 JCache(JSR-107)注解 從4.1版開始,Spring的緩存抽象完全支持JCache標(biāo)準(zhǔn)注解:@CacheResult、@CachePut、@CacheRemove和...

    fengxiuping 評論0 收藏0
  • Spring之旅第二站:bean、新特性。。。

    摘要:除了,還簡單介紹了對的支持,可以幫助應(yīng)用將散落在各處的邏輯匯集于一處切面。當(dāng)裝配的時候,這些切面能夠運行期編織起來,這樣就能呢個非常有效的賦予新功能。 第1章 Spring之旅 說明 1、本文參考了《Spring 實戰(zhàn)》重點內(nèi)容,參考了GitHub上的代碼 2、每個人的學(xué)習(xí)方式不一樣,但目的是一樣的,活學(xué)活用。最近一直在聽《我們不一樣》 3、本文只為記錄作為以后參考,要想真正領(lǐng)悟Sp...

    luodongseu 評論0 收藏0
  • 《 Kotlin + Spring Boot : 下一代 Java 服務(wù)端開發(fā) 》

    摘要:下一代服務(wù)端開發(fā)下一代服務(wù)端開發(fā)第部門快速開始第章快速開始環(huán)境準(zhǔn)備,,快速上手實現(xiàn)一個第章企業(yè)級服務(wù)開發(fā)從到語言的缺點發(fā)展歷程的缺點為什么是產(chǎn)生的背景解決了哪些問題為什么是的發(fā)展歷程容器的配置地獄是什么從到下一代企業(yè)級服務(wù)開發(fā)在移動開發(fā)領(lǐng)域 《 Kotlin + Spring Boot : 下一代 Java 服務(wù)端開發(fā) 》 Kotlin + Spring Boot : 下一代 Java...

    springDevBird 評論0 收藏0
  • Spring Framework 參考文檔(容器概述)

    摘要:容器概述接口表示容器,負(fù)責(zé)實例化配置和組裝。基于的元數(shù)據(jù)不是惟一允許的配置元數(shù)據(jù)形式,容器本身與實際編寫配置元數(shù)據(jù)的格式完全解耦,現(xiàn)在,許多開發(fā)人員為他們的應(yīng)用程序選擇基于的配置。 容器概述 org.springframework.context.ApplicationContext接口表示Spring IoC容器,負(fù)責(zé)實例化、配置和組裝bean。容器通過讀取配置元數(shù)據(jù)獲取關(guān)于要實例化...

    huashiou 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<