Spring @AliasFor作用于@Profile组合注解不生效问题求助
核心问题原因
你自定义组合注解不生效的核心原因是@AliasFor注解的作用位置配置错误:你给@AliasFor加了@get:前缀,该配置会让注解仅作用于Kotlin编译生成的属性Getter方法,而Spring的注解别名处理器只会读取注解类自身属性上的@AliasFor配置,因此你配置的profiles到@Profile#value的别名规则完全没有生效,Spring始终读取元注解上写死的default占位值,和你激活的dev环境不匹配,因此Bean不会被注册。
解决方案
修改ProfileAware注解的定义,去掉@AliasFor前的@get:前缀,同时保留运行时保留策略即可:
@Retention(AnnotationRetention.RUNTIME) // 必须保留,Spring运行时需要读取注解 @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) // 按你的使用场景配置作用范围 @Profile("default") annotation class ProfileAware( @AliasFor(annotation = Profile::class, attribute = "value") val profiles: Array<String>, // 其余代理其他注解的属性按同样规则配置即可 )
验证
修改后你原来的使用方式无需调整,启动应用后TheBean会按照预期在dev环境下完成注册。
内容的提问来源于stack exchange,提问作者Muyangmin
相关产品推荐
相关产品推荐

