欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

利用@Conditional注解实现扫描不同的包路径

程序员文章站 2022-07-16 11:38:20
...

业务场景:一个接口有多个实现类,在不同的场景下使用不同的实现类,使用配置的方式注入不同的实现类。

@Conditional注解的类型有很多,按需使用。

利用@Conditional注解实现扫描不同的包路径

示例代码:

//配置文件 application.yml
db:
  hbase: false
  mysql: true

这里使用的@ConditionalOnExpression注解,只有符合条件才会扫描指定的路径。 

/**
 * 根据配置文件 ${db.hbase} 选择是否使用hbase
 * @author hu.caiyun
 * @create 2020/6/22
 */
@Configuration
@ComponentScan(value = "com.hcy.test.dao.hbase")
@ConditionalOnExpression(value = "${db.hbase}")
public class HbaseConfig {

}

/**
 * 根据配置文件 ${db.mysql} 选择是否使用mysql
 * @author hu.caiyun
 * @create 2020/6/22
 */
@Configuration
@ComponentScan(value = "com.hcy.test.dao.mysql")
@ConditionalOnExpression(value = "${db.mysql}")
public class MySqlConfig {

}

/**
 * 在启动类中配置扫描排除掉实现类所在的包
 * @author hu.caiyun
 * @create 2020/6/22
 */
@SpringBootApplication
@ComponentScan(excludeFilters =
        {
                @ComponentScan.Filter(type = FilterType.REGEX,pattern = "com.hcy.test.dao.*")
        })
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication .class, args);
    }

}

示例代码是一个项目兼容多个数据库的实现,目前只能想到这种办法,如果有更好的办法,欢迎指教。

相关标签: Spring spring