Различные действия, введенные аннотацией @Import of Spring

Java

сегодня поделитьсяpig4cloudучаствует в@Importинъекционная форма. Благодаря различным формам внедрения архитектура максимально упрощается.

@Import импортирует компонент

приходите посмотретьEnablePigxDynamicRouteЭта аннотация, когда нам нужно запустить источник динамических данных, нужно только добавить эту аннотацию в основной метод.

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

Фактическое ядро ​​состоит в том, чтобы представитьDynamicRouteAutoConfigurationЭтот класс конфигурации, который не управляется сканированием Spring

напишите простой пример

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 не добавляет описанные выше декларативные аннотации, а внедряет bean-компонент с полным именем типа.

Интерфейс ImportSelector

Импортированные селекторы, как следует из названия, когда @Import вводит класс, которыйImportSelectorКогда интерфейс реализован, соответствующая инъекция будет выполняться в соответствии с этим селектором.

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

Когда @Import вводитImportBeanDefinitionRegistrarКласс реализации интерфейса будет автоматически введенregisterBeanDefinitionsОпределенный компонент

С настройками конфигурации сервера ресурсов свиньи,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 {

}

image