91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring中@Import注解有什么用

發布時間:2021-05-15 12:40:55 來源:億速云 閱讀:209 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關Spring中@Import注解有什么用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

認識@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表示要導入的一個或多個@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

@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) {
        // 創建容器
        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 {
}

這個時候運行App已經可以獲取到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 {
}

這個時候運行App已經可以獲取到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 {
}

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

最佳搭檔 - @Import通用形式

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

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

將AppConfig.java加上@EnableTom

@EnableTom
@Configuration
public class AppConfig {
}

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

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

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

上述就是小編為大家分享的Spring中@Import注解有什么用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

来安县| 南陵县| 社会| 洱源县| 台中县| 施秉县| 临夏市| 霍州市| 永登县| 车险| 公安县| 枣庄市| 富裕县| 沈阳市| 金堂县| 永平县| 金乡县| 弥渡县| 调兵山市| 都安| 二连浩特市| 丰县| 枝江市| 九龙坡区| 开鲁县| 瓦房店市| 霍邱县| 松江区| 鹤壁市| 孝昌县| 台山市| 四会市| 九寨沟县| 旬阳县| 比如县| 县级市| 工布江达县| 怀安县| 布尔津县| 平江县| 城市|