zpzkitt 2019-12-03 10:13 采纳率: 0%
浏览 2648
已结题

spring如何在自己实现的切面注解中使用${}获取properties配置文件中的参数值?

问题

自己实现建了一个切面注解@Mypoint
注解有一个key属性

String key();

在使用注解时

@Mypoint(key = "abc-${env}")

在properties配置文件中有

env=dev

这样通过配置文件可以动态切换注解中jKey的值
情况介绍:
这个切面注解是我引用的别人包里的,所以这个注解里的内容和功能我是没法改的,我只是想通过配置文件动态修改注解中的key值,在不同环境中给他传不同的值。


##解决过程
通常都会用@Value注解中使用${}获取properties中的参数值,在网上搜的大部分也都是说的是这个。
我自己以前尝试后在@PropertySource注解中使用

@PropertySource(value = "classpath:config-${spring.profiles.active}.yml")

这个在spring boot中使用时可行的,但是自己写的不起作用
可能有spring内部的原理没搞清楚,希望有尝试过的能提供一些建议,谢谢!!!


12-4号补充
一楼的回答我尝试了,但是不是我想要的方式,可能我的描述有遗漏,所以对问题做了一些补充。

  • 写回答

1条回答

  • 让风逝去 2019-12-03 10:52
    关注

    新建ClientEnvironmentPostProcessor类实现EnvironmentPostProcessor,ServletContextListener接口
    在postProcessEnvironment方法中写
    String[] activeProfiles = environment.getActiveProfiles();
    ProfilesBean profilesBean = ProfilesBean.getInstance();
    profilesBean.setProfiles(activeProfiles[0]);

    debug发现activeProfiles[0]就是你所需要的dev或者pro了
    public class ProfilesBean {

    //饿汉单例模式
    //在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快
    
    private static ProfilesBean profilesBean = new ProfilesBean();//静态私有成员,已初始化
    
    private String profiles;
    
    private ProfilesBean()
    {
        //私有构造函数
    }
    
    public static ProfilesBean getInstance()    //静态,不用同步(类加载时已初始化,不会有多线程的问题)
    {
        return profilesBean;
    }
    
    public String getProfiles() {
        return profiles;
    }
    
    public void setProfiles(String profiles) {
        this.profiles = profiles;
    }
    

    }

    最后在系统每处都可以用ProfilesBean.getInstance().getProfiles() 获取

    评论

报告相同问题?

悬赏问题

  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)