javascript
Spring Bean名称
 除了未明確指定名稱的情況外,Spring Bean名稱很簡單。 首先, 以這種方式為基于XML的bean定義指定Spring 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名称的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 小米电脑怎么恢复出厂设置笔记本电脑如何恢
- 下一篇: oppo手机读取u盘教程(oppo手机如
