日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Spring擴展點之ImportBeanDefinitionRegistrar

來源: 責編: 時間:2023-09-28 10:03:46 360觀看
導讀一、是什么?查看接口注釋:根據(jù)給定的注釋元數(shù)據(jù),根據(jù)需要注冊bean定義......spring會遍歷所有的beanDefinition,逐個創(chuàng)建對應的bean。public interface ImportBeanDefinitionRegistrar { /** * Register bean definition

lZ728資訊網——每日最新資訊28at.com

一、是什么?

查看接口注釋:根據(jù)給定的注釋元數(shù)據(jù),根據(jù)需要注冊bean定義......spring會遍歷所有的beanDefinition,逐個創(chuàng)建對應的bean。lZ728資訊網——每日最新資訊28at.com

public interface ImportBeanDefinitionRegistrar {	/**	 * Register bean definitions as necessary based on the given annotation metadata of	 * the importing {@code @Configuration} class.......(截取部分注釋)	 */	default void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry,			BeanNameGenerator importBeanNameGenerator) {		registerBeanDefinitions(importingClassMetadata, registry);	}	default void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {	}}

PS:創(chuàng)建bean還有哪些方式?lZ728資訊網——每日最新資訊28at.com

1、@Component、@Bean等等2、@Import(導入類)3、實現(xiàn)ImportSelector接口,重寫selectImports方法,返回需要導入的全類名4、實現(xiàn)ImportBeanDefinitionRegistrar接口,注冊bean定義

二、demo案例

StudentBean:學生類。lZ728資訊網——每日最新資訊28at.com

public class StudentBean {    private String stuName;    public String getStuName() {        return stuName;    }    public void setStuName(String stuName) {        this.stuName = stuName;    }}

StudentImportBeanDefinitionRegistrar:實現(xiàn)ImportBeanDefinitionRegistrar接口。lZ728資訊網——每日最新資訊28at.com

@Componentpublic class StudentImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {    @Override    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {        // 創(chuàng)建beanDefinitionBuilder        BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(StudentBean.class);        beanDefinitionBuilder.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);        // 獲取beanDefinition        AbstractBeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition();        BeanDefinitionHolder beanDefinitionHolder = new BeanDefinitionHolder(beanDefinition, StudentBean.class.getSimpleName());        // 注冊beanDefinition        BeanDefinitionReaderUtils.registerBeanDefinition(beanDefinitionHolder, registry);    }}

啟動類:使用@Import導入StudentImportBeanDefinitionRegistrar類。lZ728資訊網——每日最新資訊28at.com

@Import(StudentImportBeanDefinitionRegistrar.class)@SpringBootApplicationpublic class DemoApplication {    public static void main(String[] args) {        ConfigurableApplicationContext applicationContext = SpringApplication.run(DemoApplication.class, args);        StudentBean studentBean = applicationContext.getBean(StudentBean.class);        System.out.println("studentBean: " + studentBean);    }}

lZ728資訊網——每日最新資訊28at.com

我們大都習慣使用@Enable***方式引入某個組件,此處可稍作改造。lZ728資訊網——每日最新資訊28at.com

新增注解:EnableStudentBean。lZ728資訊網——每日最新資訊28at.com

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Import(StudentImportBeanDefinitionRegistrar.class)public @interface EnableStudentBean {}

啟動類修改:lZ728資訊網——每日最新資訊28at.com

@EnableStudentBean@SpringBootApplicationpublic class DemoApplication {    public static void main(String[] args) {        ConfigurableApplicationContext applicationContext = SpringApplication.run(DemoApplication.class, args);        StudentBean studentBean = applicationContext.getBean(StudentBean.class);        System.out.println("studentBean: " + studentBean);    }}

三、ImportBeanDefinitionRegistrar在其他開源項目中的使用

mybatis

在使用mybatis時,我們需要指定mapper的掃描路徑:lZ728資訊網——每日最新資訊28at.com

@MapperScan(basePackages = "com.test.demo.dao.mapper")

查看@MapperScan源碼,發(fā)現(xiàn)導入了MapperScannerRegistrar類,該類實現(xiàn)了ImportBeanDefinitionRegistrar接口。lZ728資訊網——每日最新資訊28at.com

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Import(MapperScannerRegistrar.class)@Repeatable(MapperScans.class)public @interface MapperScan

MapperScannerRegistrar類(截取部分代碼):lZ728資訊網——每日最新資訊28at.com

public class MapperScannerRegistrar implements ImportBeanDefinitionRegistrar {  @Override  public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {    // 獲取MapperScan注解    AnnotationAttributes mapperScanAttrs = AnnotationAttributes        .fromMap(importingClassMetadata.getAnnotationAttributes(MapperScan.class.getName()));    if (mapperScanAttrs != null) {      // 掃描對應的mapper接口,并注冊BeanDefinition(bean定義)      registerBeanDefinitions(importingClassMetadata, mapperScanAttrs, registry,          generateBaseBeanName(importingClassMetadata, 0));    }  }}

Openfeign

在使用OpenFeign時,我們需要指定feign接口掃描路徑:lZ728資訊網——每日最新資訊28at.com

@EnableFeignClients(basePackages = ""com.test.demo")

查看@EnableFeignClients源碼,發(fā)現(xiàn)導入了FeignClientsRegistrar類,該類實現(xiàn)了ImportBeanDefinitionRegistrar接口。lZ728資訊網——每日最新資訊28at.com

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Import(FeignClientsRegistrar.class)public @interface EnableFeignClients

FeignClientsRegistrar類(截取部分代碼):lZ728資訊網——每日最新資訊28at.com

class FeignClientsRegistrar	implements ImportBeanDefinitionRegistrar {	@Override	public void registerBeanDefinitions(AnnotationMetadata metadata,BeanDefinitionRegistry registry) {		registerDefaultConfiguration(metadata, registry);    registerFeignClients(metadata, registry);	}}

掃描所有加了@FeignClient注解的接口,接著注冊FeignClientFactoryBean類型的BeanDefinition到容器中,需要使用時生成具體的接口代理實現(xiàn)服務調用。lZ728資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-11740-0.htmlSpring擴展點之ImportBeanDefinitionRegistrar

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Java中數(shù)據(jù)共享和同步問題,導致線程安全性問題和競態(tài)條件

下一篇: Python Qt6 真的值得學習嗎?看看這些你就知道了!

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
暖暖成人免费视频| 日韩视频在线永久播放| 欧美伦理a级免费电影| 欧美日韩1区| 国产精品一国产精品k频道56| 国产日韩av一区二区| 极品少妇一区二区| 亚洲美女av电影| 午夜精品久久久久久久白皮肤 | aa级大片欧美三级| 亚洲免费成人av| 亚洲一区欧美| 久久亚洲春色中文字幕| 欧美日韩1区| 国产嫩草一区二区三区在线观看 | 欧美日韩高清在线观看| 国产精品一区二区三区四区 | 国产精品久久久久久久9999| 狠狠色综合一区二区| 日韩一级不卡| 久久精彩视频| 欧美日本亚洲| 国产亚洲综合精品| 伊人色综合久久天天| 99视频在线观看一区三区| 久久av二区| 欧美日韩成人网| 国语精品中文字幕| 一区二区三区欧美在线| 久久久久se| 欧美三级视频在线| 在线欧美视频| 香蕉精品999视频一区二区| 欧美国产综合一区二区| 国产一区二区看久久| 一本色道久久加勒比精品| 久久亚洲国产精品一区二区 | 国产精品久久久久一区二区三区共| 在线免费观看视频一区| 一区二区三区国产盗摄| 久久综合色影院| 国产日韩1区| 亚洲一区二区少妇| 欧美精品一区二区在线观看| 精东粉嫩av免费一区二区三区| 亚洲在线成人| 欧美人与禽性xxxxx杂性| 精品动漫3d一区二区三区免费版 | 国产视频久久| 亚洲午夜精品久久| 老司机精品视频一区二区三区| 国产精品自在欧美一区| 一区二区日韩免费看| 欧美成人dvd在线视频| 韩国欧美一区| 欧美一区亚洲二区| 国产精品―色哟哟| 一区二区三区日韩在线观看 | 欧美日韩www| 亚洲日本激情| 欧美成人dvd在线视频| 黄色一区三区| 久久久久国产精品人| 国产女主播一区二区三区| 亚洲午夜激情网页| 欧美日韩亚洲另类| 99re6这里只有精品| 欧美电影免费观看大全| 在线观看亚洲专区| 久久免费视频网站| 精品999在线观看| 久久另类ts人妖一区二区| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美日韩一区二区三区四区五区| 亚洲欧洲日韩综合二区| 噜噜噜久久亚洲精品国产品小说| 国内伊人久久久久久网站视频 | 久久一区二区三区av| 国外成人免费视频| 久久九九久精品国产免费直播| 国产日韩一区欧美| 久久av一区| 国内精品久久久久久影视8 | 国产精品一区二区久久久| 亚洲在线观看免费| 国产精品永久免费在线| 午夜精品久久久久久久男人的天堂 | 国产伦精品一区二区三区免费 | 免费欧美在线视频| 亚洲黄色大片| 欧美美女视频| 99爱精品视频| 欧美手机在线视频| 亚洲欧美日韩在线不卡| 国产欧美日韩在线视频| 久久国产精品99国产| 一区二区在线观看视频| 久久婷婷成人综合色| 亚洲福利视频网| 欧美精品一区二区精品网| 99视频一区二区| 国产精品视区| 久久久久久久久久码影片| 在线看日韩av| 欧美日韩一区二区欧美激情 | 狂野欧美性猛交xxxx巴西| 91久久夜色精品国产九色| 欧美人在线观看| 亚洲男人av电影| 红杏aⅴ成人免费视频| 蜜臀久久99精品久久久久久9| 亚洲精品综合久久中文字幕| 国产精品成人观看视频免费| 欧美一级黄色录像| 在线精品视频一区二区| 欧美精品自拍| 午夜精品视频| 一区二区三区精品久久久| 欧美日韩在线一区二区三区| 午夜精品福利一区二区三区av | 免费不卡亚洲欧美| 亚洲美女视频在线免费观看| 国产精品免费视频观看| 久久动漫亚洲| 亚洲精品视频免费在线观看| 国产精品国产成人国产三级| 久久成人综合视频| 亚洲久久成人| 国产欧美精品在线| 欧美高清不卡在线| 亚洲欧美日韩天堂| 91久久极品少妇xxxxⅹ软件| 国产精品免费视频观看| 美国三级日本三级久久99| 一本色道**综合亚洲精品蜜桃冫| 国产视频一区二区在线观看| 欧美粗暴jizz性欧美20| 亚洲嫩草精品久久| 亚洲国产欧美一区| 国产精品无码专区在线观看| 理论片一区二区在线| 亚洲夜晚福利在线观看| 黄色亚洲在线| 国产精品yjizz| 美女精品国产| 午夜精品久久久久影视| 亚洲精品一区二区三区福利| 国产日韩欧美a| 欧美日韩成人综合| 久久免费一区| 亚洲欧美日韩国产成人精品影院| 亚洲国产裸拍裸体视频在线观看乱了中文| 国产精品成人一区二区三区夜夜夜| 久久综合图片| 欧美一区二区黄| 夜夜嗨av色综合久久久综合网| 伊人男人综合视频网| 国产精品女同互慰在线看| 欧美激情一区二区三级高清视频| 久久激情五月激情| 亚洲一区二区3| 亚洲人成在线免费观看| 国产主播一区二区| 国产精品第三页| 欧美另类变人与禽xxxxx| 久久麻豆一区二区| 午夜久久99| 日韩一级视频免费观看在线| 韩国av一区| 国产精品综合视频| 国产精品成人一区| 欧美日韩精品系列| 欧美国产成人精品| 久久网站热最新地址| 欧美一区二粉嫩精品国产一线天| 一区二区欧美在线观看| 亚洲人成人一区二区在线观看| 国产在线精品一区二区夜色| 国产精品尤物| 国产精品久久久久一区二区三区 | 亚洲精品一区二区三区蜜桃久| 激情久久影院| 国产日韩精品综合网站| 国产精品久久久久久久久久三级| 欧美日韩高清不卡| 欧美极品在线观看| 免费中文日韩| 久久午夜电影| 久久久久久一区| 久久狠狠久久综合桃花| 午夜综合激情| 亚洲欧美区自拍先锋| 亚洲视频综合| 99日韩精品| 一区二区精品在线| 一区二区三区免费看| 亚洲免费成人av| 亚洲美女少妇无套啪啪呻吟| 亚洲人体影院| 亚洲人永久免费| 亚洲欧洲日产国码二区| 亚洲精品社区| 99在线精品观看| 一区二区三区视频观看|