信息门户网站建设报价,网站建设中故障分类和排除方法,用易语言做抢购网站软件下载,淮北官方网站在最近的工作中#xff0c;get到一个很实用的注解#xff0c;分享给诸位。痛点做过微信或支付宝支付的童鞋#xff0c;可能遇到过这种问题#xff0c;就是填写支付结果回调#xff0c;就是在支付成功之后#xff0c;支付宝要根据我们给的地址给我们进行通知#xff0c;通… 在最近的工作中get到一个很实用的注解分享给诸位。痛点做过微信或支付宝支付的童鞋可能遇到过这种问题就是填写支付结果回调就是在支付成功之后支付宝要根据我们给的地址给我们进行通知通知我们用户是否支付成功如果成功我们就要去处理下面相应的业务逻辑如果在测试服务那么这个回调地址我们就需要填写测试服务的如果发布到线上那么我们就需要改成线上的地址。针对上面的场景我们一般都会通过如下的方式进行一个动态配置不需要每次去改防止出现问题。public class PayTest { Value(${spring.profiles.active}) private String environment; public Object notify(HttpServletRequest request) { if (prod.equals(environment)) { // 正式环境 } else if (test.equals(environment)) { // 测试环境 } return SUCCESS; }}上面的代码看起来没有一点问题但是身为搬砖的我们咋可能这样搬姿势不对呀问题扩展性太差如果这个参数我们还需要在别的地方用到那么我们是不是还要使用Value的注解获取一遍假如有天我们的leader突然说吗test这个单词看着太low了换个高端一点的,换成dev那么我们是不是要把项目中所有的test都要改过来,如果少还好,要是很多,那我们怕不是凉了。所以我们能不能将这些配置参数搞成一个全局的静态变量这样的话我们直接引用就好了哪怕到时候真的要改那我也只需要改动一处就好了。注意大坑有的朋友可能就比较自信了那我直接加个static修饰下不就好了如果你真是打算这样做那你就准备卷好铺盖走人吧。直接加static获取到的值其实是一个null至于原因大家复习下类以及静态变量变量的加载顺序。PostConstruct注解那么既然说出了问题肯定就有解决方法不然你以为我跟你玩呢。首先这个注解是由Java提供的它用来修饰一个非静态的void方法。它会在服务器加载Servlet的时候运行并且只运行一次。改造Componentpublic class SystemConstant { public static String surroundings; Value(${spring.profiles.active}) public String environment; PostConstruct public void initialize() { System.out.println(初始化环境...); surroundings this.environment; }}结果我们可以看到在项目启动的时候进行了初始化到这里我们已经可以拿到当前运行的环境是测试还是正式这样就可以做到动态配置最后想说其实这个注解远不止这点用处像我之前写的Redis工具类我使用的是RedisTemplate操作Redis导致写出来的方法没办法用static修饰每次使用Redis工具类只能先注入到容器然后再调用使用了这个注解就可以完美的解决这种尴尬的问题。代码如下。import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;/** * ClassName RedisUtil * Description TODO * Auther bingfeng * Date 2019/7/4/004 17:14 * Version 1.0 */Componentpublic class RedisUtil { private static RedisTemplate redisTemplates; Autowired private RedisTemplate redisTemplate; PostConstruct public void initialize() { redisTemplates this.redisTemplate; } /** * 添加元素 * * param key * param value */ public static void set(Object key, Object value) { if (key null || value null) { return; } redisTemplates.opsForValue().set(key, value); }}【推荐阅读】字符串、集合如何判断空值看看成年人的正确操作List如何根据属性排序快来get吧高效开发超实用的一款IDEA开发插件