springboot 注解动态赋值_SpringBoot注解内容的动态配置

时间:2025-04-23 22:38:56

大家都知道,注解只能配置常量,在一些构架的开发中,有时候我们需要给注解动态配置一些值,或者想从配置文件中读取配置。直接在注解上配置是无法实现的,但是我们可以在拿到注解的值之后,再对这些值进行另外的操作。比如在注解上面配置占位符,在使用的时候,再对这些占位符进行替换。在RocketMQ的监听配置中,就使用了这个技术,如下代码所示:

@RocketMQMessageListener(topic = "${-game-message-topic}", consumerGroup = "gateway-message-consumer-group")

public class GatewayMessageReceiveService implements RocketMQListener {

@Override

public void onMessage(MessageExt message) {

}

}

这里面RocketMQMessageListener注解配置的Topic就是配置的占位符,它会读取yml配置文件中的-game-message-topic配置的值。那么它是怎么实现的呢?很简单,spring boot已经替换我们实现了,只需要调一下方法就可以了,如下面代码所示:

((()));

比如,在服务器启动的时候,想在日志上面打印一下注解中topic的真实值,如下所示:

@Autowired

private Environment environment;

@PostConstruct

public void init() {

RocketMQMessageListener messageListener = ().getAnnotation();

String topic = (());

("监听网关消息,topic:{},group:{}",topic,());

}

另外,简单了解一下在Spring 占们符以#和$开头的不同:

${key名称}

1.用户获取外部文件中指定key的值 2.可以在xml中配置,也可以出现在@value注解中 3.一般用于获取数据库配置内容信息

#{表达式}

中el表达式的格式 2.可以在xml中配置,也可以出现在@value注解中 3.可以任意表达式,支持运算符