- 使用starter的方式比较简单,引入jar包即可
- 对于配置信息是放在application.properties文件还是使用@EnableXxx的参数形式,如果开发、测试、生产环境配置都一样,那么使用@Enable方式比较好,可以减少配置文件,同时由于几个环境相同,修改一处就全部修改,但是灵活度差点
- 如果配置信息全在@Enable属性中,那么可以使用实现ImportBeanDefinitionRegistrar接口的方式,大概如下:
public class LockerConfig implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, @NonNull BeanDefinitionRegistry registry) {
MergedAnnotation<EnableLocker> anno = importingClassMetadata.getAnnotations().get(EnableLocker.class);
String versionColumn = anno.getString("versionColumn");
boolean failThrowException = anno.getBoolean("failThrowException");
LockerInterceptor lockerInterceptor = new LockerInterceptor(versionColumn, failThrowException);
DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) registry;
beanFactory.registerSingleton("lockerInterceptor", lockerInterceptor);
}
}
- 这种方式的好处,是将注解放在单元测试类头顶也能生效,可以测试不同的属性,
- 使用上述方式的坏处,获取属性不太方便,只能通过实现EnvironmentAwre的方式使用env获取,并且由于是properties方式获取,只能获取k,v方式的配置,对于数组就获取不到,因为ImportBeanDefinitionRegistrar实例方法被调用的时候beanFactory还没被初始化
- 使用下面方式的好处是,可以方便获取属性,但是:context.getBeansWithAnnotation(EnableXXX.class)获取不到单元测试类头顶的注解,不太好测试不同参数的表现
@Configuration
@EnableConfigurationProperties(SqlprinterProperties.class)
public class SQLPrinterConfig implements ApplicationContextAware {
private final List<ValueConverter> convs = new ArrayList<>();
@Override
public void setApplicationContext(@Nonnull ApplicationContext context) throws BeansException {
Collection<Object> values = context.getBeansWithAnnotation(EnableSQLPrinter.class).values();
values.forEach(e -> {
EnableSQLPrinter annotation = AnnotationUtils.findAnnotation(e.getClass(), EnableSQLPrinter.class);
Class<? extends ValueConverter>[] converters = annotation.converters();
for (Class<? extends ValueConverter> converter : converters) {
convs.add(ReflectUtil.newInstance(converter));
}
});
}
@Bean
public SqlPrinter sqlPrinter(SqlprinterProperties sqlprinterProperties) {
return new SqlPrinter(sqlprinterProperties, convs);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY