欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Spring 注解之@Import 注入的各種花活

 更新時(shí)間:2020年01月16日 15:47:00   作者:冷冷gg  
這篇文章主要介紹了詳解Spring 注解之@Import 注入的各種花活,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

今天來分享一下 pig4cloud 中涉及的 @Import 的注入形式。通過不同形式的注入方式,最大程度使得架構(gòu)簡(jiǎn)潔。

@Import導(dǎo)入一個(gè)組件

來看 EnablePigxDynamicRoute 這個(gè)注解,當(dāng)我們需要開始動(dòng)態(tài)數(shù)據(jù)源時(shí),只需要在main 方法加上此注解即可。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(DynamicRouteAutoConfiguration.class)
public @interface EnablePigxDynamicRoute {
}

實(shí)際核心是引入 DynamicRouteAutoConfiguration 這個(gè)配置類,此類并未被Spring 掃描管理

寫個(gè)簡(jiǎn)單的例子

public class Dog {
}

@Import({Dog.class})
@SpringBootApplication
public class SpringLearnApplication {

  public static void main(String[] args) {
    ConfigurableApplicationContext context = SpringApplication.run(SpringLearnApplication.class, args);
    Assert.isTrue(context.containsBean("com.pig4cloud.spring.learn.demo1.Dog"), "error dog bean");
  }
}

注意 Dog 并未增加上文的聲明式注解,注入了一個(gè)全類型名稱的Bean

ImportSelector 接口

顧名思義導(dǎo)入的選擇器,當(dāng) @Import 引入的類是 ImportSelector 接口的實(shí)現(xiàn)時(shí),會(huì)按照此選擇器進(jìn)行匹配注入

public class DogImportSelector implements ImportSelector {
  @Override
  public String[] selectImports(AnnotationMetadata importingClassMetadata) {
    ... 匹配邏輯查詢出來一堆要注入的全類名
    return new String[]{"com.pig4cloud.spring.learn.demo1.Dog"};
  }
}

@Import({DogImportSelector.class})
@SpringBootApplication
public class SpringLearnApplication {

  public static void main(String[] args) {
    ConfigurableApplicationContext context = SpringApplication.run(SpringLearnApplication.class, args);
    Assert.isTrue(context.containsBean("com.pig4cloud.spring.learn.demo1.Dog"), "error dog bean");
  }
}

ImportBeanDefinitionRegistrar

當(dāng)@Import 引入的是 ImportBeanDefinitionRegistrar 接口實(shí)現(xiàn)類,會(huì)自動(dòng)引入 registerBeanDefinitions 定義的Bean

以pig 的資源服務(wù)器配置設(shè)置,自動(dòng)引入了一個(gè) PigxResourceServerConfigurerAdapter 的類,且 bean 名稱為 resourceServerConfigurerAdapter

public class PigxSecurityBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {

  @Override
  public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
    GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
    beanDefinition.setBeanClass(PigxResourceServerConfigurerAdapter.class);
    registry.registerBeanDefinition(SecurityConstants.RESOURCE_SERVER_CONFIGURER, beanDefinition);

  }
}

這也就意味著,若使用 EnablePigxResourceServer 注解即可開啟 pig4cloud 封裝的oauth 資源客戶端操作類,也是源碼的入口

@Import({PigxSecurityBeanDefinitionRegistrar.class})
public @interface EnablePigxResourceServer {

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論