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

歡迎訪問 生活随笔!

生活随笔

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

javascript

Spring Bean名称

發布時間:2023/12/3 javascript 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Bean名称 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

除了未明確指定名稱的情況外,Spring Bean名稱很簡單。 首先, 這種方式為基于XML的bean定義指定Spring bean名稱:

<bean name='sampleService1' class='mvcsample.beanname.SampleService'><constructor-arg><bean class='mvcsample.beanname.SampleDao'></bean></constructor-arg> </bean>

對于基于Java @Configuration的Bean定義,帶@Bean注釋的方法的方法名稱將成為Bean名稱:

@Configuration @ComponentScan(basePackages='mvcsample.beanname') public static class SpringConfig{@Beanpublic SampleService sampleService(){return new SampleService(sampleDao());}@Beanpublic SampleDao sampleDao(){return new SampleDao();}}

對于基于構造型注釋 (@ Component,@ Service,@ Repository等)的bean,值字段指示bean名稱:

@Repository('aSampleDao') public class SampleDao {... }@Service('aSampleService') public class SampleService {... }

現在,在未指定Bean名稱的情況下會發生什么。

基于XML的Bean配置案例:

對于基于xml的配置,通常不指定Bean名稱的情況適用于可以作用于整個Bean工廠的Bean,例如,例如定義BeanPostProcessor或BeanFactoryPostProcessor 。 考慮下面的虛擬BeanPostProcessor,它僅從Bean工廠獲取所有Bean名稱:

public class BeanNameScanningBeanPostProcessor implements BeanPostProcessor{private List<String> beanNames = new ArrayList<>();@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {beanNames.add(beanName);return bean;}public List<String> getBeanNames(){return this.beanNames;} }

通常可以通過以下方式在xml bean配置中定義它:

<bean class='mvcsample.beanname.BeanNameScanningBeanPostProcessor'/>

第二種情況是基于XML的配置,其中通常不指定名稱,例如內部Bean。 這樣定義:

<bean class='mvcsample.beanname.SampleService'><constructor-arg><bean class='mvcsample.beanname.SampleDao'></bean></constructor-arg> </bean>

這些情況下的Bean名稱由一個名為BeanNameGenerator的組件處理。 對于頂級bean,該名稱通常以符合包的類名以及實例數的形式結束,這種方式是:

mvcsample.beanname.BeanNameScanningBeanPostProcessor#0

對于內部bean,由于它僅存在于其包含bean的范圍內,因此名稱并不相關,但是在內部,它確實基于bean定義的十六進制哈希碼(例如'mvcsample)獲得名稱。 beanname.SampleDao#1881ee8b'

基于Java的@Configuration案例:

另一方面,對于基于Java的@Configuration,無法指定沒有名稱的bean,bean名稱是方法名。

基于注釋的配置

對于基于構造型注釋的Bean,如果未使用構造型注釋的value字段顯式指定名稱,則該名稱再次由AnnotationBeanNameGenerator生成,后者是BeanNameGenerator策略接口的實現,生成的名稱只是該類的簡稱。 ,例如從AnnotationBeanNameGenerator的javadoc中獲取-com.xyz.FooServiceImpl的bean名稱變為fooServiceImpl。

結論:

因此,最后得出結論,如果Bean名稱以某種方式與您相關(例如,為了消除多個相同類型的Bean實例之間的歧義),則最好明確名稱,否則依靠Spring生成用于您。 在某些情況下,例如 使用Spring-data項目,可以將存儲庫的自定義行為指定為單獨的Bean,
默認情況下,Spring-data使用Spring命名約定來查找自定義實現,并且了解如何生成Bean名稱會有所幫助。

參考: all和其他博客中來自JCG合作伙伴 Biju Kunjummen的Spring Bean名稱 。

翻譯自: https://www.javacodegeeks.com/2013/02/spring-bean-names.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Spring Bean名称的全部內容,希望文章能夠幫你解決所遇到的問題。

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