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

spring-@propertysource,获取一个NPE;(

萧奇
2023-03-14

我的环境:

  • jdk/jre:1.6.0_06
  • 操作系统:Linux Mint 13
  • Spring:4.1.6.发布

StackTrace:

Exception in thread "main" java.lang.NullPointerException
    at com.mycompany.app.ExpressiveConfig.main(ExpressiveConfig.java:33)
disc.title=Sgt.PeppersLonelyHeartsClubBand
disc.artist=TheBeatles
package com.mycompany.app;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.*;
import org.springframework.core.env.Environment;

@PropertySource("classpath:/com/mycompany/app/app.properties")
public class ExpressiveConfig {

    @Autowired
    Environment env;

    @Bean
    public App get() {
        return new App("hello", env.getProperty("disc.artist"));
    }

    public static void main(String args[]) {
        App a = new ExpressiveConfig().get();
    }

}
package com.mycompany.app;

import org.springframework.stereotype.Component;

public class App {

      private final String title;
      private final String artist;

      public App(String title, String artist) {
        this.title = title;
        this.artist = artist;
      }

      public String getTitle() {
        return title;
      }

      public String getArtist() {
        return artist;
      }
}

失败的尝试:

>

  • 我尝试使用@propertysource注释,例如使用file:prefix和属性文件的绝对路径。删除类路径(如/@propertysource)(“classpath:com/mycompany/app/app.properties”)之前的反斜杠。将属性文件放在不同的位置。

    我还尝试使用@propertysources,其中也包含@propertysource注释。

    非常感谢任何帮助/建议!!

  • 共有1个答案

    通建安
    2023-03-14

    Spring只会将依赖项注入它自己管理的bean中。由于您自己创建了该实例(new ExpressiveConfig()),因此不会执行依赖项注入,因为实际上根本不涉及Spring。

    您需要为该类型创建一个具有bean定义的应用程序上下文,并从中检索实例。

    为此,将ExpressiveConfig注释为spring@configuration,然后将该类传递给AnnotationConfigApplicationContext而不是自己实例化它。然后您就可以使用getBean(...)从上下文中检索bean了。

     类似资料:
    • 我会用这样的方法来利用这些价值: 但是,我最终出现了一个错误,如下所示: 我如何在我的测试中也利用YAML的优点?

    • 我在Tomcat8上部署了一个传统的SpringBoot应用程序。即使我定义了@PropertySources注释,在@PropertySources中指定的目录中给定的属性文件中定义的属性似乎找不到。我修改了一个SpringBootWeb示例项目,可以复制这个问题。在下面的示例中,调用web控制器的结果总是“Hello Default,来自Spring Boot的问候语!”。它从来没有提到过“名

    • 问题内容: 我想获取特定月份/年份中第一个星期一的日期。 我有的: 我基本上有两个int变量,一个代表年份,一个代表月份。 我想要的是: 我想知道本月的第一个星期一,最好是一个int或Integer值。 例如: 我有2014年和1月(1月),这个月的第一个星期一是6号,所以我想返回6。 问题: 我以为可以做到这一点,但是在设置日历(仅提供年和月)时已经遇到了麻烦。此外,我不确定如何使用返回实际的月

    • 问题内容: K,所以我有两个表: 我想从类别中获取所有信息,并计算每个类别中的问题数(question_id)。 假设,第一个类别(计费)将有一个问题,第二个类别(安全)将有3个问题。 我已经试过了: 问题答案: 您想这样做: 在将确保没有问题类别获得与数= 0上市

    • 我正在使用@PropertySource配置一个配置类: 我现在正在使用Spring Cloud Config将配置外部化到Git:所有application.yml文件都已迁移。但是,我不知道这是否可能,以及如何将属性文件外部化,就像在@PropertySource中声明的那样。 我所做的:我尝试在Git中将mongo-prod.properties重命名为application-prod.pr

    • 我有一份这样的ES文档 我正在使用Spring数据通过存储库接口与ES对话 现在我需要构建一个rest接口来响应这样的JSON格式数据 由于中的和非常大,因此从ES中检索所有字段非常昂贵。 我知道ES有一个名为“响应过滤”的功能可以满足我的要求,但我没有找到在Spring Data中使用它的方法。 如何在spring数据中实现这一点?