电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

基于spring三方包類注入容器的四種方式小結(jié)

瀏覽:2日期:2023-08-11 17:32:40

如果引用第三方j(luò)ar包,肯定是不能直接使用常用注解@Controller、@Service、@Repository、@Component將類的實例注入到spring容器中。以下四種方法可以向spring容器中導入三方包中類實例 。

1 xml配置

這種情況大家用的比較多,就是在spring的xml文件中配置需要導入的bean。在springweb項目工程web.xml中 ContextLoaderListener或者DispatcherServlet的初始參數(shù)contextConfigLocation指定spring配置文件位置,可以在該配置文件中直接定義bean,或者在該配置文件中import專門配置三方bean的xml文件。springboot工程,可以在啟動類上面加注解@ImportResource。@ImportResource注解可以通過value指定需要掃描的xml文件,value是字符串數(shù)組可以指定多個xml配置文件。

@SpringBootApplication@ImportResource(value = {'classpath:spring-bean.xml'})public class DubboOneApplication { public static void main(String[] args) { SpringApplication.run(DubboOneApplication.class, args); }}

2 @Configuration和@Bean

可以通過直接直接向spring容器注入bean。在開啟注解掃描的情況下,在掃描的包路徑中添加具有@Configuration注解的類,在該類的定義返回某個實例的方法,這個方法加上@Bean的注解,那么這個方法的返回值將注入spring容器,這個bean的名稱是這個方法的名稱。

3 @Import

@Import可以直接向容器中導入第三方包中bean。在開啟注解掃描的情況下,可以在有@Controller,@Service,@Component,@Repository,@Configuration注解的類上面添加@Import注解,@Import注解有一個類數(shù)組類型的屬性,類數(shù)組中的類有以下四種情況

普通的類名稱,該類被注入容器,bean名稱是全類名

@SpringBootApplication@Import({TestTwo.class})public class DubboOneApplication { public static void main(String[] args) { SpringApplication.run(DubboOneApplication.class, args); }}

具有Configuration作用的類,沒有@Configuration注解,里面定義了具有@Bean注解的方法,例如上面TestTwo中有一個返回TestThree的方法使用了@Bean注解,那么TestThree也會注入進容器,bean名稱就是方法名,和@Configuration注入功能類似。

ImportSelector實現(xiàn)類,該接口具有一個方法,方法的返回值是字符串數(shù)組,每一項是全類名,通過參數(shù)AnnotationMetadata可以得到這個被@Import注解修飾類的信息。同樣這樣注入進來的bean的名稱也是全類名,可以返回空數(shù)組,不可以返回null。第一種直接寫注入類名和使用ImportSelector實現(xiàn)類,都沒有辦法使用注入類的有參構(gòu)造方法,bean的名稱也沒有辦法指定,不過只單實例自動注入,不用關(guān)心bean名稱。

public interface ImportSelector { /** * Select and return the names of which class(es) should be imported based on * the {@link AnnotationMetadata} of the importing @{@link Configuration} class. */ String[] selectImports(AnnotationMetadata importingClassMetadata); }

ImportBeanDefinitionRegistrar實現(xiàn)類,該類有個方法可以直接向Application中手動注入bean,我們可以簡單定義一個bean然后注入。

@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { RootBeanDefinition definition = new RootBeanDefinition(TestFive.class); registry.registerBeanDefinition('testTive',definition); }

4 @FactoryBean

FactoryBean可以用來實現(xiàn)代理,原始的代理實現(xiàn)就可以使用ProxyFactoryBean,還有專門用來實現(xiàn)事務代理的TransactionProxyFactoryBean。使用注解和配置的方式和一般bean一樣向容器中注入一個FactoryBean的實現(xiàn)類,實際注入的該FactoryBean中g(shù)etObject方法返回的對象,這個bean的名稱還是對應配置或注解中指定的名稱。

@Component('testFive')public class TestFour implements FactoryBean<TestFive>{ @Override public boolean isSingleton() { return true; } @Override public TestFive getObject() throws Exception { return new TestFive(); } @Override public Class<?> getObjectType() { return TestFive.class; }}

補充知識:Spring Boot @Import注解(將指定類實例注入到IOC容器中)

[color=red][size=large][b]SpringBoot 的 @Import 用于將指定的類實例注入到Spring IOC Container中。[/b][/size][/color] SpringBoot 提供了 三種使用 @Import 將 類實例注入至 Spring IOC Container中 的實例。

1.直接注入

2.實現(xiàn) ImportBeanDefinitionRegistrar 接口 注入

3.實現(xiàn) ImportSelector 注入

[color=red][b]直接注入

[/b][/color]

Broker.java(無任何屬性和實現(xiàn))

package com.springBoot.entrance.importBean.direct;public class Broker {}

Customer.java(無任何屬性和實現(xiàn))

package com.springBoot.entrance.importBean.direct;public class Customer {}

ImportDirect.java

package com.springBoot.entrance.importBean.direct;import org.springframework.context.annotation.Import;import org.springframework.stereotype.Component;@Component@Import({Customer.class,Broker.class})/** *使用Import 將指定的類的實例注入至Spring 容器中 */public class ImportDirect {}

[b][color=red]代碼解讀:使用 @Import({Customer.class,Broker.class}) 后 Customer 和 Broker類的實例將會被注入之Spring IOC Container中[/color][/b]

App.java

//import Direct 使用import 直接將指定的類實例注入至Spring 容器中System.out.println(context.getBean(ImportDirect.class));System.out.println(context.getBean(Customer.class));System.out.println(context.getBean(Broker.class));

以上這篇基于spring三方包類注入容器的四種方式小結(jié)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 深圳货架厂_仓库货架公司_重型仓储货架_线棒货架批发-深圳市诺普泰仓储设备有限公司 | 口信网(kousing.com) - 行业资讯_行业展会_行业培训_行业资料 | 沙盘模型公司_沙盘模型制作公司_建筑模型公司_工业机械模型制作厂家 | 绿叶|绿叶投资|健康产业_绿叶投资集团有限公司 | 舞台木地板厂家_体育运动木地板_室内篮球馆木地板_实木运动地板厂家_欧氏篮球地板推荐 | GAST/BRIWATEC/CINCINNATI/KARL-KLEIN/ZIEHL-ABEGG风机|亚喜科技 | 北京企业宣传片拍摄_公司宣传片制作-广告短视频制作_北京宣传片拍摄公司 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 神超官网_焊接圆锯片_高速钢锯片_硬质合金锯片_浙江神超锯业制造有限公司 | 飞扬动力官网-广告公司管理软件,广告公司管理系统,喷绘写真条幅制作管理软件,广告公司ERP系统 | 雪花制冰机(实验室雪花制冰机)百科| TYPE-C厂家|TYPE-C接口|TYPE-C防水母座|TYPE-C贴片-深圳步步精 | 实验室pH计|电导率仪|溶解氧测定仪|离子浓度计|多参数水质分析仪|pH电极-上海般特仪器有限公司 | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | 浇钢砖,流钢砖_厂家价低-淄博恒森耐火材料有限公司 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | 密集柜_档案密集柜_智能密集架_密集柜厂家_密集架价格-智英伟业 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 骨龄仪_骨龄检测仪_儿童骨龄测试仪_品牌生产厂家【品源医疗】 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | 水上浮桥-游艇码头-浮动码头-游船码头-码瑞纳游艇码头工程 | Duoguan 夺冠集团| 经济师考试_2025中级经济师报名时间_报名入口_考试时间_华课网校经济师培训网站 | 自恢复保险丝_贴片保险丝_力特保险丝_Littelfuse_可恢复保险丝供应商-秦晋电子 | 英语词典_成语词典_日语词典_法语词典_在线词典网 | 建大仁科-温湿度变送器|温湿度传感器|温湿度记录仪_厂家_价格-山东仁科 | 合景一建-无尘车间设计施工_食品医药洁净车间工程装修总承包公司 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 招商帮-一站式网络营销服务|互联网整合营销|网络推广代运营|信息流推广|招商帮企业招商好帮手|搜索营销推广|短视视频营销推广 | 北京中航时代-耐电压击穿试验仪厂家-电压击穿试验机 | 苏州伊诺尔拆除公司_专业酒店厂房拆除_商场学校拆除_办公楼房屋拆除_家工装拆除拆旧 | 上海洗地机-洗地机厂家-全自动洗地机-手推式洗地机-上海滢皓洗地机 | 自清洗过滤器,浅层砂过滤器,叠片过滤器厂家-新乡市宇清净化 | 肉嫩度仪-凝胶测试仪-国产质构仪-气味分析仪-上海保圣实业发展有限公司|总部 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 有声小说,听书,听小说资源库-听世界网 | 上海小程序开发-小程序制作-上海小程序定制开发公司-微信商城小程序-上海咏熠 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 北京易通慧公司从事北京网站优化,北京网络推广、网站建设一站式服务商-北京网站优化公司 | NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 脱硝喷枪-氨水喷枪-尿素喷枪-河北思凯淋环保科技有限公司 |