Enable

springboot 整合其他组件时通常在启动类加EnableXXX ,暂时总结如下:

@EnableMyComponent
public class EnableMyComponentApp {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
        applicationContext.register(EnableMyComponentApp.class);
        applicationContext.refresh();
        User user = applicationContext.getBean("user", User.class);
        System.out.println(user);
        applicationContext.close();

    }
}

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
// 1. 通过Configuration注解的类来实现
//@Import(HelloWorldConfiguration.class)
// 2. 通过 ImportSelector接口实现
// @Import(HelloWorldImportSelector.class)
// 3. 通过ImportBeanDefinitionRegistrar接口实现
@Import(HelloWorldImportBeanDefinitionRegistrar.class)
public @interface EnableMyComponent {

}

@Configuration
public class HelloWorldConfiguration {
    @Bean
    public User user(){
        return new User("Marina", 35);
    }
}

/**
 * ImportSelector 实现
 */
public class HelloWorldImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{"com.example.springsecuritymyy.enable.HelloWorldConfiguration"};
    }
}

/**
 * ImportBeanDefinitionRegistrar 实现
 * @see ImportBeanDefinitionRegistrar
 */
public class HelloWorldImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {

    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        AnnotatedGenericBeanDefinition beanDefinition = new AnnotatedGenericBeanDefinition(HelloWorldConfiguration.class);
        BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, registry);
    }
}

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private Integer age;
}

  1. 通过注解类实现
    @Import(HelloWorldConfiguration.class)

  2. 通过注解导入ImporterSelector实现类

比如:
1. 启动类加@EnableDiscoveryClient
2. 注解中导入ImportSelector实现类@Import(EnableDiscoveryClientImportSelector.class)
image.png
  1. 通过注解导入ImportBeanDefinitionRegistrar实现类
比如:
1. 启动类加@EnableFeignClients
2. 注解中导入ImportSelector实现类 @Import(FeignClientsRegistrar.class) 
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容