我有一个启动Spring Boot应用程序的GUI:
SpringApplication application = new SpringApplication(ServerSpringApplication.class);
ConfigurableApplicationContext ctx = application.run(args);
我正在尝试将对象的GUI引用传递给Spring Boot应用程序,以便SpringApplication可以从GUI对象中读取值。
我知道args
是String[]
,所以我认为我不能通过run方法传递对象。
或者,SpringApplication
有没有办法找到对实例化它的对象的引用?
感谢您的帮助和指导。
答案 0 :(得分:0)
我认为你喜欢这样做,因为" GUI对象"将要改变,Spring Boot应用程序应该继承这些值吗?
正如其他人所说,这是一种反模式,使用Spring来托管GUI或者在架构上使用其他一些通信方法会更清晰。你可以通过这种方式获得一些奇怪的记忆交互。
所以,请谨慎行事。
如果你确实想要主应用程序和SB之间的交互,那么Spring Boot应用程序在与启动它的应用程序相同的JVM中运行(请注意这一点,因为这意味着它共享相同的堆空间,因此请确保你有足够的分配)。这意味着您可以使用单例实例来存储GUI应用程序,Spring Boot应用程序可以访问该单例。
即,
public class MyGuiStorage {
private static MyGuiStorage _instance = null;
//The object SpringBoot should have access to
private static GuiObject myObj = null;
protected MyGuiStorage () {
// Don't allow public instantiation
}
public static MyGuiStorage getInstance() {
if( _instance== null) {
_instance= new MyGuiStorage();
}
return instance;
}
public void setGuiObject(GuiObject myObj) {
this.myObj = myObj;
}
public GuiObject getGuiObject() {
return myObj;
}
}
然后Spring可以使用MyGuiStorage.getInstance().getGuiObject();