Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在SpringBoot中从SpringApplication访问类成员变量_Java_Spring_Spring Boot - Fatal编程技术网

Java 如何在SpringBoot中从SpringApplication访问类成员变量

Java 如何在SpringBoot中从SpringApplication访问类成员变量,java,spring,spring-boot,Java,Spring,Spring Boot,在SpringBoot中使用SpringApplication启动应用程序时,如何访问成员变量 在下面的代码中,我在分配给Environment和BuildProperties时遇到编译错误。我想一定有办法通过SpringApplication或ConfigurableApplicationContext引用这些属性,但我不知道怎么做 我得到的编译错误是, 无法从静态上下文引用非静态变量环境 我知道这只是如何避开它 我想我的问题是——SpringApplication返回类级引用的方式是否与普通

在SpringBoot中使用SpringApplication启动应用程序时,如何访问成员变量

在下面的代码中,我在分配给
Environment
BuildProperties
时遇到编译错误。我想一定有办法通过
SpringApplication
ConfigurableApplicationContext
引用这些属性,但我不知道怎么做

我得到的编译错误是,
无法从静态上下文引用非静态变量环境
我知道这只是如何避开它


我想我的问题是——SpringApplication返回类级引用的方式是否与普通java MyClass MyClass=new MyClass()返回类级引用的方式相同


您可以在DisplaySysInfo类中注入环境

@Autowire
Environment env;
或者从上下文本身检索环境

 ConfigurableApplicationContext run = SpringApplication.run(ExampleApplication.class, args);
 ConfigurableEnvironment environment = run.getEnvironment();

在主类中使用这种逻辑从来都不是一个好的实践,相反,您可以在完成程序的初始Bean注入和配置之后使用@PostConstruct来启动一个新Bean。 因此,您可以使用@PostConstruct将此逻辑移动到另一个类:

environment = context.getEnvironment();  //compile error
buildProperties = context.getBean(BuildProperties.class); //compile error

这样,您就不会得到任何静态上下文错误,代码也会更干净。

我在这里回答您的问题


“我想我的问题是——SpringApplication返回类级引用的方式是否与普通java MyClass MyClass=new MyClass()返回类级引用的方式相同?”

简而言之,答案是否定的,Spring不像new MyClass()那样返回对对象实例的引用。当您使用spring上下文时,您会得到对bean的引用,这些bean实际上是普通类的代理。 我建议您阅读更多关于DI和spring组件的内容,这里有一个小型教程。本教程有点旧,使用xml符号来声明bean,但概念和定义仍然有效


希望这能有所帮助。

为什么需要从main方法访问这些变量?因为我正在实例化另一个类并将这些值传递给它。。。我已经更新了我的代码示例来说明这一点,以防它有助于澄清问题。在普通Java程序中,我只需实例化类,然后通过类引用成员变量——但由于我要通过Spring,这是不可能的。我想我的问题是——SpringApplication是否以与普通Java
MyClass MyClass=new MyClass()相同的方式返回类级引用
是吗?我不知道你为什么说“你不能同时在两行上出现编译错误”,或者“肯定不是来自你在这里标记的任何一行”——对于这两个语句,我不得不说这是不正确的。我确实提到了编译错误,它们在两行上。我认为这并不奇怪。即使这是一个普通的Java应用程序,我也会预期同样的编译错误——因为我试图通过静态上下文引用成员变量。
environment = context.getEnvironment();  //compile error
buildProperties = context.getBean(BuildProperties.class); //compile error