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

歡迎訪問 生活随笔!

生活随笔

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

javascript

factorybean 代理类不能按照类型注入_Spring注解驱动开发之四——@Import快速导入组件、FactoryBean 定义工厂注册组件...

發布時間:2025/1/21 javascript 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 factorybean 代理类不能按照类型注入_Spring注解驱动开发之四——@Import快速导入组件、FactoryBean 定义工厂注册组件... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文包含以下內容:

  • @Import快速導入組件

  • 配合ImportSelector 導入組件

  • 配合ImportBeanDefinitionRegistrar 導入組件

  • FactoryBean 定義工廠注冊組件

  • 1.@Import快速導入組件

    在前幾篇推文中,通過@Bean 標記在方法上,手動new 一個實例注入到容器中,這種方法,會比較繁瑣,需要手動編寫過多無意義代碼 @Bean("bill") public Person person01(){ return new Person("Bill Gates",62); }通過@Import,方法可以不需要編寫構造方法,快速注冊組件1)建立測試類public?class?Color?{}public class Red {??}public class Blue {??}public class Yellow {}2)使用@Import({Color.class,Red.class})? 導入類組件@Import({Color.class,Red.class})public class MainConfig2 {}3)編寫測試方法@Testpublic void testImport(){ printBeans(applicationContext); Blue bean = applicationContext.getBean(Blue.class); System.out.println(bean);}private void printBeans(AnnotationConfigApplicationContext applicationContext){ String[] definitionNames = applicationContext.getBeanDefinitionNames(); for (String name : definitionNames) { System.out.println(name); }}4)運行測試,可以看到@Import注解創建的組件默認以全類名作為id 的形式注入到容器中

    2.配合ImportSelector 導入組件

    在@Import注解 中還能添加ImportSelector

    查看源碼,看到這個接口需要實現selectImports 返回類的全類名即可:

    1)創建Selector//自定義邏輯返回需要導入的組件public class MyImportSelector implements ImportSelector { //返回值,就是到導入到容器中的組件全類名 //AnnotationMetadata:當前標注@Import注解的類的所有注解信息 @Override public String[] selectImports(AnnotationMetadata importingClassMetadata) { // TODO Auto-generated method stub //importingClassMetadata //方法不要返回null值 return new String[]{"peason.zxc.annotation.bean.Blue","peason.zxc.annotation.bean.Yellow"}; }}2)在注解中引入Selector@Import({Color.class, Red.class,MyImportSelector.class})3)獲得測試結果,能夠注入"peason.zxc.annotation.bean.Blue","peason.zxc.annotation.bean.Yellow"等組件

    3.配合ImportBeanDefinitionRegistrar 導入組件

    在@Import注解中還能添加ImportSelector

    1)建立自定義的實現類其中有2個參數:AnnotationMetadata:當前類的注解信息BeanDefinitionRegistry :當前容器的注冊入口,可以直接注冊組件下面例子是如果注冊器內存在Red 、Blue 的組件,就進行創建rainBow 實例,此處id 累哦自定義名稱public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { /** * AnnotationMetadata:當前類的注解信息 * BeanDefinitionRegistry:BeanDefinition注冊類; * 把所有需要添加到容器中的bean;調用 * BeanDefinitionRegistry.registerBeanDefinition手工注冊進來 */ @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { boolean definition = registry.containsBeanDefinition("peason.zxc.annotation.bean.Red"); boolean definition2 = registry.containsBeanDefinition("peason.zxc.annotation.bean.Blue"); if(definition && definition2){ //指定Bean定義信息;(Bean的類型,Bean。。。) RootBeanDefinition beanDefinition = new RootBeanDefinition(RainBow.class); //注冊一個Bean,指定bean名 registry.registerBeanDefinition("rainBow", beanDefinition); } }}2)在注解中引入@Import({Color.class, Red.class,MyImportSelector.class,MyImportBeanDefinitionRegistrar.class})3)測試結果,成功根據條件注入了id 為rainBow的組件

    4.FactoryBean 定義工廠注冊組件

    在@Import注解,會調用默認的無參構造器創建對象,而注入容器FactoryBean 的主鍵會默認調用,這個接口的getObject()返回實例進行組件的創建。下面進行測試:1)創建實現FactoryBean 接口的類//創建一個Spring定義的FactoryBeanpublic class ColorFactoryBean implements FactoryBean { //返回一個Color對象,這個對象會添加到容器中 @Override public Color getObject() throws Exception { // TODO Auto-generated method stub System.out.println("ColorFactoryBean...getObject..."); return new Color(); } @Override public Class> getObjectType() { // TODO Auto-generated method stub return Color.class; } //是單例? //true:這個bean是單實例,在容器中保存一份 //false:多實例,每次獲取都會創建一個新的bean; @Override public boolean isSingleton() { // TODO Auto-generated method stub return false; }}2)通過@Bean 將工廠注入到容器中 @Bean public ColorFactoryBean colorFactoryBean(){ return new ColorFactoryBean(); }3)編寫測試方法 @Test public void testImport(){ printBeans(applicationContext); //工廠Bean獲取的是調用getObject創建的對象 Object bean2 = applicationContext.getBean("colorFactoryBean"); Object bean3 = applicationContext.getBean("colorFactoryBean"); System.out.println("bean的類型:"+bean2.getClass()); System.out.println(bean2 == bean3); Object bean4 = applicationContext.getBean("&colorFactoryBean"); System.out.println(bean4.getClass()); }4)獲得結果

    5)分析結果:1.在打印所有的組件可以看到colorFactoryBean 組件通過獲取,多次可以看到,2次獲取結果并非同一個實例對象,由此見得,在方法isSingleton 生效了,采用多實例構建//是單例? //true:這個bean是單實例,在容器中保存一份 //false:多實例,每次獲取都會創建一個新的bean; @Override public boolean isSingleton() { // TODO Auto-generated method stub return false; }2.通過該id 獲取該組件,獲取到bean 的類型為peason.zxc.annotation.bean.Color?由此可見,獲取對象時通過調用getObject函數創建組件//返回一個Color對象,這個對象會添加到容器中 @Override public Color getObject() throws Exception { // TODO Auto-generated method stub System.out.println("ColorFactoryBean...getObject..."); return new Color(); }3.可以通過&符號獲取到FactoryBean 對象即最后的結果class peason.zxc.annotation.bean.ColorFactoryBean,可以看到源碼所示,指定了&符號

    -END-

    可以關注我的公眾號,免費獲取價值1980元學習資料

    點擊“在看”,學多少都不會忘~

    總結

    以上是生活随笔為你收集整理的factorybean 代理类不能按照类型注入_Spring注解驱动开发之四——@Import快速导入组件、FactoryBean 定义工厂注册组件...的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 国产1区| 精品久久久久久无码国产 | 免费看成人毛片 | 精品少妇一区 | 黄色网页在线免费观看 | 国产精品99一区二区三区 | 天天看天天干 | 日韩国产二区 | 老牛av一区二区 | 黄色自拍网站 | 天堂av在线电影 | 68日本xxxxxⅹxxx22| 国产精品久久久久久久成人午夜 | 大尺度做爰无遮挡露器官 | 老外毛片| 激情综合影院 | 在哪看毛片 | 国产又爽又黄的激情精品视频 | 国产精品免 | 丰满少妇中文字幕 | 成人在线观看一区二区三区 | 久久成年人 | 五月婷婷六月色 | 超碰1997| 黄色在线视频观看 | 亚洲国产精品久久久久 | 欧美精品三级 | 五月伊人网| 99re视频在线 | 女~淫辱の触手3d动漫 | 久久久久蜜桃 | 国产三级网 | 欧美黑人多人双交 | 国产r级在线观看 | 春闺艳妇(h)高h产乳 | 国产精品成人3p一区二区三区 | 日本女人毛片 | 亚洲av少妇一区二区在线观看 | 国产精品一国产精品 | 日韩视频在线观看 | 免费一区视频 | avtt一区| 污片在线观看 | 500福利视频导航 | 茄子av在线 | 日本大尺度电影免费观看全集中文版 | 亚洲国产一区二区在线 | 伊人中文字幕在线观看 | 亚洲福利影院 | 久久不卡日韩美女 | 成人小视频在线 | 亚洲jlzzjizz少妇 | 国产亚洲av综合人人澡精品 | 欧美日韩免费观看一区=区三区 | 亚洲人xxx日本人18 | 看特级毛片 | 中文字幕精品一区二区三区精品 | 亚洲电影一区二区 | 看污网站| 欧洲亚洲成人 | 在线观看视频www | 成年人免费网站在线观看 | 久久人人爽人人爽人人 | 国产成人片 | av网在线 | 可以免费看毛片的网站 | 日本福利在线观看 | 成人精品综合 | 国产精品一区二区av白丝下载 | 精品一区二区在线观看视频 | 天天想你在线观看完整版高清 | 国产无遮挡呻吟娇喘视频 | 性调教学院高h学校 | 国产经典久久久 | 欧美亚洲日本一区 | jizzjizz免费 | 国产11页| 久久视频在线看 | 美女mm131爽爽爽免费动视频 | 琪琪久久 | 成人精品国产 | 欧美美女爱爱视频 | 精品国产露脸精彩对白 | 蜜臀99久久精品久久久久久软件 | 少妇被躁爽到高潮无码文 | 欧美女优在线观看 | 日韩国产欧美在线观看 | 五月六月婷婷 | 女同互舔视频 | 给我看免费高清在线观看 | 国产无套内射普通话对白 | 婷婷激情综合 | 亚洲精品日产精品乱码不卡 | 成人黄色片免费看 | 久久精品一区二区三区四区 | 日本不卡高清视频 | 久久综合第一页 | 亚洲黄色在线观看 | 久热精品在线视频 |