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

您的位置:首頁技術文章
文章詳情頁

Spring @Import注解的使用

瀏覽:3日期:2023-07-15 08:39:43
目錄認識@Import注解搭建項目結構用于測試@Import用法最佳搭檔 - @Import通用形式總結認識@Import注解

先看一下源碼

@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Import {/** * {@link Configuration}, {@link ImportSelector}, {@link ImportBeanDefinitionRegistrar} * or regular component classes to import. */Class<?>[] value();}

@Import表示要導入的一個或多個@Configuration類

看注釋value通常是一個普通的組件,Configuration,ImportSelector,ImportBeanDefinitionRegistrar。

搭建項目結構用于測試 先創建一個maven工程加入依賴

<dependencies> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.18</version> </dependency> <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.24.RELEASE</version> </dependency></dependencies>

編寫測試代碼Tom.java

@Datapublic class Tom { private String color; private Integer age;}

AppConfig.java

@Configurationpublic class AppConfig {}

App.java

public class App { public static void main(String[] args) {// 創建容器AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);// 獲取beanTom tom = context.getBean(Tom.class);System.out.println(tom); }}@Import用法

第一種普通組件@Import({ 要導入的容器中的組件 } )

CustomConfiguration.java

@Configurationpublic class CustomConfiguration { @Bean public Tom tom() {Tom tom = new Tom();tom.setAge(11);tom.setColor('紅色');return tom; }}

將AppConfig.java加上@Import({ CustomConfiguration.class })

@Import({ CustomConfiguration.class })@Configurationpublic class AppConfig {}

這個時候運行App已經可以獲取到Tom

第二種ImportSelectorCustomSelector.java

public class CustomSelector implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[] { 'com.moli.pojo.Tom' }; }}

將AppConfig.java加上@Import({ CustomRegistrar.class })

@Import({ CustomRegistrar.class })@Configurationpublic class AppConfig {}

這個時候運行App已經可以獲取到Tom

第三種ImportBeanDefinitionRegistrarCustomRegistrar.java

public class CustomRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(Tom.class);builder.setScope(BeanDefinition.SCOPE_SINGLETON);builder.addPropertyValue('color', '灰色');builder.addPropertyValue('age', '12');registry.registerBeanDefinition('tom', builder.getBeanDefinition()); }}

將AppConfig.java加上@Import({ CustomSelector.class })

@Import({ CustomSelector.class })@Configurationpublic class AppConfig {}

這個時候運行App已經可以獲取到Tom

最佳搭檔 - @Import通用形式

在開源軟件中大部分@Import中是伴隨著一個@EnableXXX使用的

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

將AppConfig.java加上@EnableTom

@EnableTom@Configurationpublic class AppConfig {}

這樣看起來,是不是有那味了。

其實SpringBoot的自動配置就是@Import的一個應用

@SuppressWarnings('deprecation')@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@AutoConfigurationPackage@Import(EnableAutoConfigurationImportSelector.class)public @interface EnableAutoConfiguration { ...}總結

直白一點使用@Import注解可以快速把實例加入Spring的IOC容器中

其實這三種用法也算是一種用法,就是導入一個類到容器,容器根據類的注解類型等信息對不同類進行不同處理;

方法一:導入一個Configuration組件,組件創建了一個Tom類的Bean;

方法二:CustomSelector返回的類的全限定類名,實際上要導入到容器中的組件全類名;

方法三:ImportBeanDefinitionRegistrar類似于第二種ImportSelector用法,只不過這種用法能自定義化注冊,往容器內注入一個BeanDefinition,然后BeanDeiniton在容器內轉為一個實例bean;

以上就是Spring @Import注解的使用的詳細內容,更多關于Spring @Import注解的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
主站蜘蛛池模板: WTB5光栅尺-JIE WILL磁栅尺-B60数显表-常州中崴机电科技有限公司 | SOUNDWELL 编码器|电位器|旋转编码器|可调电位器|编码开关厂家-广东升威电子制品有限公司 | 探伤仪,漆膜厚度测试仪,轮胎花纹深度尺厂家-淄博创宇电子 | 行吊_电动单梁起重机_双梁起重机_合肥起重机_厂家_合肥市神雕起重机械有限公司 | 东莞压铸厂_精密压铸_锌合金压铸_铝合金压铸_压铸件加工_东莞祥宇金属制品 | 永嘉县奥阳陶瓷阀门有限公司| 订做不锈钢_不锈钢定做加工厂_不锈钢非标定制-重庆侨峰金属加工厂 | 咖啡加盟-咖啡店加盟-咖啡西餐厅加盟-塞纳左岸咖啡西餐厅官网 | CPSE安博会 | 青州开防盗门锁-配汽车芯片钥匙-保险箱钥匙-吉祥修锁店 | 周易算网-八字测算网 - 周易算网-宝宝起名取名测名字周易八字测算网 | 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | 智能风向风速仪,风速告警仪,数字温湿仪,综合气象仪(气象五要素)-上海风云气象仪器有限公司 | 水性绝缘漆_凡立水_绝缘漆树脂_环保绝缘漆-深圳维特利环保材料有限公司 | 济南菜鸟驿站广告|青岛快递车车体|社区媒体-抖音|墙体广告-山东揽胜广告传媒有限公司 | 净水器代理,净水器招商,净水器加盟-FineSky德国法兹全屋净水 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | 技德应用| 水性绝缘漆_凡立水_绝缘漆树脂_环保绝缘漆-深圳维特利环保材料有限公司 | 压装机-卧式轴承轮轴数控伺服压装机厂家[铭泽机械] | 烟气在线监测系统_烟气在线监测仪_扬尘检测仪_空气质量监测站「山东风途物联网」 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂 | 成都珞石机械 - 模温机、油温机、油加热器生产厂家 | 成都网站建设制作_高端网站设计公司「做网站送优化推广」 | 一航网络-软件测评官网 | 牛奶检测仪-乳成分分析仪-北京海谊| 合肥升降机-合肥升降货梯-安徽升降平台「厂家直销」-安徽鼎升自动化科技有限公司 | 急救箱-应急箱-急救包厂家-北京红立方医疗设备有限公司 | 美名宝起名网-在线宝宝、公司、起名平台 | 山东聚盛新型材料有限公司-纳米防腐隔热彩铝板和纳米防腐隔热板以及钛锡板、PVDF氟膜板供应商 | 阿里巴巴诚信通温州、台州、宁波、嘉兴授权渠道商-浙江联欣科技提供阿里会员办理 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 中山市派格家具有限公司【官网】 | 微型气象仪_气象传感器_防爆气象传感器-天合传感器大全 | 光栅尺厂家_数显表维修-苏州泽升精密机械 | 恒温恒湿试验箱_高低温试验箱_恒温恒湿箱-东莞市高天试验设备有限公司 | 防水套管厂家-柔性防水套管-不锈钢|刚性防水套管-天翔管道 | 列管冷凝器,刮板蒸发器,外盘管反应釜厂家-无锡曼旺化工设备有限公司 | 焊缝跟踪系统_激光位移传感器_激光焊缝跟踪传感器-创想智控 |