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

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

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

public class GatewayMessageReceiveService implements RocketMQListener {

@Override

public void onMessage(MessageExt message) {

}

}

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

container.setTopic(environment.resolvePlaceholders(annotation.topic()));

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

@Autowired

private Environment environment;

@PostConstruct

public void init() {

RocketMQMessageListener messageListener = this.getClass().getAnnotation(RocketMQMessageListener.class);

String topic = environment.resolvePlaceholders(messageListener.topic());

logger.info("监听网关消息,topic:{},group:{}",topic,messageListener.consumerGroup());

}

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

${key名称}

1.用户获取外部文件中指定key的值

2.可以在xml中配置,也可以出现在@value注解中

3.一般用于获取数据库配置内容信息

#{表达式}

1.spring中el表达式的格式

2.可以在xml中配置,也可以出现在@value注解中

3.可以任意表达式,支持运算符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值