@Import注解的作用是什么?

通过导入的方式,来实现把实例加入Spring容器中的功能,相当于Spring xml配置文件中的<import /> 标签。

@Import注解能够导入哪些类?

可以导入普通类;
可以和@Configuration注解的类搭配使用;
可以和实现了ImportSelectorImportBeanDefinitionRegistrar接口的类搭配使用。

@Import注解能够添加到哪些类上?

@Import注解可以添加在自定义的注解、@SpringBootApplication(启动类)、@Configuration(配置类)和@Component(组件类)所注解的类上(@RestController、@Service、@Repository都属于@Component),从而实现将实例加入到Spring容器中的功能。

①. 可以在自定义的注解中使用

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
// 表示通过aop框架暴露该代理对象,AopContext能够访问
@EnableAspectJAutoProxy(exposeProxy = true)

// 指定要扫描的Mapper类的包的路径
@MapperScan("com.hadoopx.**.mapper")
// 开启线程异步执行
@EnableAsync
// 导入相关配置类
@Import({ ApplicationConfig.class, FeignAutoConfiguration.class })
public @interface EnableCustomConfig
{
}

②. 可以在启动类中使用

@EnableServiceFeignClients
@EnableDiscoveryClient
@MapperScan("com.hadoopx.**.mapper")
@SpringBootApplication
@Slf4j
@Import({MinioUtil.class})
public class MySpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(MySpringBootApplication.class, args);
    }
}

③. 配合配置类导入配置对象

// 配置类
@Configuration
@Import({DroolsProperties.class})
public class DroolsConfig {

    @Bean
    @ConditionalOnMissingBean(name = "kieTemplate")
    public KieTemplate kieTemplate(DroolsProperties droolsProperties) {
        KieTemplate kieTemplate = new KieTemplate();
        kieTemplate.setPath(droolsProperties.getPath());
        kieTemplate.setMode(droolsProperties.getMode());
        if (droolsProperties.isAutoUpdate()) {
            // 启用自动更新
            kieTemplate.setUpdate(droolsProperties.getUpdate());
        } else {
            // 关闭自动更新
            kieTemplate.setUpdate(999999L);
        }
        kieTemplate.setListener(droolsProperties.isListener());
        kieTemplate.setVerify(droolsProperties.isVerify());
        kieTemplate.setUseRedis(droolsProperties.isUseRedis());
        return kieTemplate;
    }

    @Bean
    @ConditionalOnMissingBean(name = "kieSchedule")
    public KieSchedule kieSchedule(KieTemplate kieTemplate) {
        KieSchedule kieSchedule = new KieSchedule(kieTemplate);
        kieSchedule.execute();
        return kieSchedule;
    }
}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐