国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Spring @Import注解的使用

發(fā)布時(shí)間:2021-07-06 11:13 來(lái)源:腳本之家 閱讀:0 作者:口袋里的貓 欄目: 開(kāi)發(fā)技術(shù)

目錄

認識@Import注解

先看一下源碼

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {

	/**
	 * {@link Configuration}, {@link ImportSelector}, {@link ImportBeanDefinitionRegistrar}
	 * or regular component classes to import.
	 */
	Class<?>[] value();

}

@Import表示要導入的一個(gè)或多個(gè)@Configuration類(lèi)

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

搭建項目結構用于測試

  • 先創(chuàng )建一個(gè)maven工程
  • 加入依賴(lài)
<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>

編寫(xiě)測試代碼
Tom.java

@Data
public class Tom {
    private String color;
    private Integer age;
}

AppConfig.java

@Configuration
public class AppConfig {
}

App.java

public class App {
    public static void main(String[] args) {
        // 創(chuàng  )建容器
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        // 獲取bean
        Tom tom = context.getBean(Tom.class);
        System.out.println(tom);
    }
}

@Import用法

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

CustomConfiguration.java

@Configuration
public 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 })
@Configuration
public class AppConfig {
}

這個(gè)時(shí)候運行App已經(jīng)可以獲取到Tom

第二種ImportSelector
CustomSelector.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 })
@Configuration
public class AppConfig {
}

這個(gè)時(shí)候運行App已經(jīng)可以獲取到Tom

第三種ImportBeanDefinitionRegistrar
CustomRegistrar.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 })
@Configuration
public class AppConfig {
}

這個(gè)時(shí)候運行App已經(jīng)可以獲取到Tom

最佳搭檔 - @Import通用形式

在開(kāi)源軟件中大部分@Import中是伴隨著(zhù)一個(gè)@EnableXXX使用的

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

將AppConfig.java加上@EnableTom

@EnableTom
@Configuration
public class AppConfig {
}

這樣看起來(lái),是不是有那味了。

其實(shí)SpringBoot的自動(dòng)配置就是@Import的一個(gè)應用

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

總結

直白一點(diǎn)使用@Import注解可以快速把實(shí)例加入Spring的IOC容器中

其實(shí)這三種用法也算是一種用法,就是導入一個(gè)類(lèi)到容器,容器根據類(lèi)的注解類(lèi)型等信息對不同類(lèi)進(jìn)行不同處理;

方法一:導入一個(gè)Configuration組件,組件創(chuàng )建了一個(gè)Tom類(lèi)的Bean;

方法二:CustomSelector返回的類(lèi)的全限定類(lèi)名,實(shí)際上要導入到容器中的組件全類(lèi)名;

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

以上就是Spring @Import注解的使用的詳細內容,更多關(guān)于Spring @Import注解的資料請關(guān)注腳本之家其它相關(guān)文章!

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

国产无遮挡又黄又爽网站| 亚洲无人区码二码三码区别图| 无码人妻精品一二三区免费| 亚洲 中文字幕 日韩 无码| 永久免费的啪啪网站免费观看浪潮| 亚洲欧美成AⅤ人在线观看|