当前位置: 首页 > 面试题库 >

使用纯Java配置的Spring 3.2 @value注释不起作用,但是Environment.getProperty起作用

龙景澄
2023-03-14
问题内容

我一直在为此努力。不知道我在想什么。我无法使@Value注释在纯Java配置的Spring应用程序(非Web)中工作

@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
Name: ${my.prop}

主类只是初始化上下文。

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);

但是,如果我使用

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

这个片段

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

然后就可以了 当然现在环境又回来了null


问题答案:

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

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

为了使@Value注释生效,PropertySourcesPlaceholderConfigurer应该注册。它使用时自动完成<context:property- placeholder>的XML,但应注册为一个static @Bean使用时@Configuration

请参阅@PropertySource文档和此Spring
Framework Jira问题。



 类似资料:
  • 问题内容: 我正在尝试使用Java批注,但似乎无法使我的代码认识到其中存在。我究竟做错了什么? 问题答案: 您需要使用注释界面上的@Retention注释将注释指定为运行时注释。 即

  • 我有一个简单的类叫BeaconDao 然而,当我用@service或@component标记beaconDao时,一切都运行得非常好。有人能看出问题所在吗?

  • 这件事让我头疼。不知道我错过了什么。我无法在纯java配置的spring应用程序(非web)中使用注释 属性文件只包含bean如下所示: 环境变量正确打印值,不正确 主类只是初始化上下文。 但是如果我使用 有了这个片段 当然,现在环境返回。

  • 问题内容: 我知道有一些关于此的帖子,但是它们大约一年了,没有任何回应。实际上,我们在PostgreSQL 8.4上使用的是Hibernate 4.2.1.Final。我们有两个这样的实体 实体A(顶级层次结构类) 实体B(子类) 如您所见,使用注释了一个实体,但是当使用来获取顶级类时 我们也通过属性获得了B子类。实际上,SQL语句包含。这仍然是Hibernate第四版中的错误,还是我做错了什么?

  • 问题内容: 我从Spring Framework开始,想做一个带有注释的HelloWorld,我已经创建了一个控制器和一个视图,我猜它是基本的hello工作。但是,我想使用注释,因为我不能再使用SimpleFormController(已弃用)。 我收到的错误是Estado HTTP 404-/av/index.jsp 我正在使用Netbeans,并将示例基于它提供的基本模板。我有以下文件,我可以