当前位置: 首页 > 知识库问答 >
问题:

Spring 3.2@value注释与纯java配置不工作,但Environment.get属性工作

籍英叡
2023-03-14

这件事让我头疼。不知道我错过了什么。我无法在纯java配置的spring应用程序(非web)中使用@Value注释

@Configuration
@PropertySource("classpath:app.properties")
public class Config {
    @Value("${my.prop}") 
    String name;

    @Autowired
    Environment env;

    @Bean(name = "myBean", initMethod = "print")
    public MyBean getMyBean(){
         MyBean myBean = new MyBean();
         myBean.setName(name);
         System.out.println(env.getProperty("my.prop"));
         return myBean;
    }
}

属性文件只包含my。prop=avaluebean如下所示:

public class MyBean {
    String name;
    public void print() {
        System.out.println("Name: " + name);
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

环境变量正确打印值,@value不正确
avalue
名称:${my.prop}

主类只是初始化上下文。

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);

但是如果我使用

@ImportResource("classpath:property-config.xml")

有了这个片段

<context:property-placeholder location="app.properties" />

当然,现在环境返回null

共有1个答案

丁文轩
2023-03-14

在您的Config类中添加以下bean声明

@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}

为了使@Value注释生效,应注册属性资源占位符配置器。使用

请参阅@PropertySource文档和本期Spring Framework Jira。

 类似资料:
  • 问题内容: 我一直在为此努力。不知道我在想什么。我无法使注释在纯Java配置的Spring应用程序(非Web)中工作 该属性文件仅包含bean,如下所示: 环境变量会正确打印该值,而不会正确打印。 主类只是初始化上下文。 但是,如果我使用 这个片段 然后就可以了 当然现在环境又回来了。 问题答案: 在您的类中添加以下bean声明 为了使注释生效,应该注册。它使用时自动完成的XML,但应注册为一个使

  • 试图让spring boot@ConfigurationProperties注释工作起来,这让我感到非常困难。所以希望有人能为我澄清我做错了什么。我有一个Spring Boot应用程序,它在类路径上包含一个application.properties。它的价值在于 我有一个application.class,它有spring boot注释,位于包层次结构的顶部 有人告诉我我做错了什么吗? 更新:

  • 我的spring应用程序有点小问题。下面是我的代码: (存储库) 下面是我的简单服务类: 更新:配置

  • 我们一直在使用Spring@Value注释来注入属性值。我们有一个约定来命名属性名称,以匹配它们注入的java字段。这带来了不必要的工作,即每个ConfigBean的java字段都需要用@Value注释。 我正在寻找一种方法,用新的注释注释java类(比如说ConfigBean),让一些后处理器读取这些bean的属性名称,并自动注入属性值。 我正在寻找一些关于如何在没有@Value注释的情况下实现

  • 我正在尝试在数据库中保存对象。正在执行代码并创建实体的Id,但实体未持久化到数据库(未插入行): 从三行(beginTransation,flush,commit)中删除注释解决了问题,但是为什么注释在这里不起作用呢? spring XML: POM xml文件: