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() 获取

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog