Java 从非控制器类中的application.properties访问属性

Java 从非控制器类中的application.properties访问属性,java,spring,properties,autowired,Java,Spring,Properties,Autowired,在上面提到的示例中,我们在消息处理程序类中硬编码了TestUser(username)和TestPassword(password)。 经过一些研究后,我无法实现@Autowired和@value。如果您的.properties文件保存在本地硬盘上的某个位置,并且是KPL(关键项目位置)之一,请帮助我解决此问题,您只需执行以下操作: Properties propObj = new Properties (); FileInputStream fis = new FileInputStream(

在上面提到的示例中,我们在消息处理程序类中硬编码了TestUser(username)和TestPassword(password)。
经过一些研究后,我无法实现@Autowired和@value。如果您的
.properties
文件保存在本地硬盘上的某个位置,并且是KPL(关键项目位置)之一,请帮助我解决此问题,您只需执行以下操作:

Properties propObj = new Properties ();
FileInputStream fis = new FileInputStream("relative path to your file");
propObj.load(fis);
完成此操作后,只需使用getProperty()或setProperty()访问/更改所需的属性。如果您选择的文件是
xml
文件,那么还有另一种方法可以使用
loadFromXML()
方法。我希望这能解决您的问题,因为无论您是否在控制器类中,都很难加载文件。如果我是对的,那么你会在网上找到无数的例子,告诉你只做我上面写的:)

使用@Autowire之类的工具时,请记住,必须在目标类开始之前使用
@ContextConfiguration(“location\u of_file.xml”)
进行注释。在指定applicationContext文件时,获取正确的相对路径可能有点棘手。请参阅并通过其他链接了解更多信息

顺便说一句,您必须记住,应用程序属性在某种程度上是应用程序的内部属性,因此,它们设置在源文件之外的
.properties
文件中,以便在不更改源代码的情况下运行(如果我说的是胡说八道,请纠正我!)。

如果您使用的是构建自动化工具,如Maven或Ivy,那么有一种方法可以确保使用a)POM和b)applicationContext.xml文件设置应用程序属性。通过这种方式,如果目标计算机上的某个相对路径不是正确的,那么应用程序甚至可以与故障更加解耦。如果你想这样做,你必须小心设置POM中的过滤器。我个人并没有手工完成这项工作,但几个月前我们正在做一个项目,当时我的一位同事将文件管理器放在我面前。我之所以记得这一点,是因为过滤器设置不正确导致了所有问题。对不起,但是你必须自己用谷歌叔叔找到它

我在pom文件中设置了用户名和密码,并将其与application.properties分离。问题不在于此,而在于处理程序类中的@autowiring my applicationProperties bean(我在applicationContext.xml中声明了它)。如果你看一下这个链接,我尝试过类似的方法:“@Autowired”private Properties applicationProperties;”字符串TestUsername=applicationProperties.getProperty(“properties.username”);“”字符串TestPassword=applicationProperties.getProperty(“properties.password”);'然后在我的handleMessage()中使用它@Josh我在上面的链接上看不到任何
@autowired
信息,特别是你在评论中提到的信息。你应该把它贴在这里,这样我们就可以同时看到你的代码和问题…@Josh我更新了我的答案,检查它是否有用,然后告诉我们。