сегодня поделиться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 {
}