首頁 > 軟體

SpringBoot2底層註解@Import用法詳解

2022-05-28 14:00:12

SpringBoot2註解@Import

上一篇中瞭解到了@Configuration,可以註冊元件。除此之外,還有許多註解也可以,用法跟之前學習 spring 的時候一樣。
比如,@Bean@Component@Controller@Service@Repository等。

這篇介紹另外一種給容器新增元件的方法:@Import註解,給容器中匯入元件。

@Import 匯入元件

用法

@Import的用法很簡單,放在任意設定類或者元件裡面都可以。

另外,它還是陣列,所以可以匯入多個元件。比如:

@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods = false)
public class MyConfig {
    @Bean("user1")
    public User user01(){
        User pingguo = new User("pingguo",20);
        pingguo.setPet(tomcatPet());
        return pingguo;
    }
    @Bean("pet1")
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }
}

這裡匯入了 2 個元件,分別是User.classDBHelper.class

其中 User.class 是之前我自定義的類,而DBHelper.class是隨便找的一個第三方包下的類。

寫好之後,@Import就可以給容器中自動建立出這 2 個型別的元件。

驗證

驗證一下,容器中是否存在上述的 2 個元件。

程式碼還是加在 main 方法裡,把全部程式碼放出來,方便後續檢視。

// 標記這是一個 springboot應用,這個類是主程式類,所有啟動的入口
@SpringBootApplication(scanBasePackages = "com.pingguo")
public class MainApplication {
    public static void main(String[] args) {
        // 返回IOC容器
        final ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
        // 檢視容器裡的元件
        final String[] beanDefinitionNames = run.getBeanDefinitionNames();
        for (String name: beanDefinitionNames) {
            System.out.println(name);
        }
        // 從容器中獲取元件
        MyConfig bean = run.getBean(MyConfig.class);
        System.out.println("設定類也是元件:" + bean);
        User user1 = bean.user01();
        User user2 = bean.user01();
        System.out.println(user1 == user2);
        // 依賴關係
        User user01 = run.getBean("user1", User.class);
        Pet pet1 = run.getBean("pet1", Pet.class);
        System.out.println("依賴:" + (user01.getPet() == pet1));
        // @Import 元件
        String[] beanNamesForType = run.getBeanNamesForType(User.class);
        System.out.println("====獲取 User 型別的 bean ====");
        for (String s : beanNamesForType) {
            System.out.println(s);
        }
        System.out.println("====獲取 DBHelper 型別的 bean ====");
        DBHelper bean1 = run.getBean(DBHelper.class);
        System.out.println(bean1);
    }
}

看最後// @Import 元件相關的程式碼。

這裡因為之前學習中註冊過多個 User 型別的元件,所以遍歷一下列印輸出。

執行結果中,可以看到有2個 User 型別的 bean,分別是user1和com.pingguo.boot.bean.User。

對於user1,是之前使用@bean註冊的。

而對於com.pingguo.boot.bean.User,則是這次使用Import匯入進去的,預設元件名是全類名。

最後一個ch.qos.logback.core.db.DBHelper@4943defe,這是匯入的第三方的包的類,成功在容器中註冊了元件。

以上就是SpringBoot2底層註解@Import用法詳解的詳細內容,更多關於SpringBoot2註解@Import的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com