gpt4 book ai didi

java - 如何在 Java 代码中检测应用程序类型

转载 作者:行者123 更新时间:2023-11-29 06:09:20 25 4
gpt4 key购买 nike

假设我们有一个 java 包。这个包可以在任何地方使用。但是,此包中有一些代码依赖于上下文。例如,如果使用此包的应用程序是 Web 应用程序,我们需要通过调用一个函数来执行一些任务,而如果该应用程序是控制台应用程序,则我们需要通过调用完全相同的函数来执行其他任务。

这是我的问题:

在 Java 中有什么方法可以在代码中检测应用程序是作为 Web 应用程序还是作为控制台运行?我感谢任何帮助:)

作为一个真实世界的例子,我们加载属性文件的方式对于 Web 和控制台应用程序是不同的。

对于 Web 应用程序,我们可能使用 this.getClass().getClassLoader().getResourceAsStream(url),对于控制台应用程序,我们使用 new FileInputStream(physical path)

最佳答案

最好在某处设置构建属性而不是尝试检测您的应用程序类型,因为我认为没有可靠的方法可以做到这一点。

此外,您不应尝试检测应用程序类型,因为根据现代架构原则,您的 View 层(Web、桌面或控制台)应该可以轻松互换。


回应您最后的评论。

正如 user384706 所说,DI 是 IMO 的正确选择。我将以 spring 为例。

在您的控制台和网络应用程序部件中,您可以:

public class WebOrConsoleServiceImpl {

private PropertyProvider propertyProvider = new NullPropertyProvider();

// and

public void setPropertyProvider(PropertyProvider impl) {
this.propertyProvider = impl;
}

// and in your service logic

public void logic() {

final Properties props = propertyProvider.loadProperties();
// do stuff
}
}

对于 PropertyProvider 的不同实现,您的 loadProperties() 方法将被覆盖。

并且在您的 spring 上下文中,您可以:

<bean id="consolePropertyProvider" class="com.company.ConsolePropertyProvider"/>

<bean id="myConsoleService" class="com.company.MyConsoleService">
<property name="propertyProvider" ref="consolePropertyProvider" />
</bean>

以及 WebServiceWebPropertyProvider 的同一对 bean 定义。

关于java - 如何在 Java 代码中检测应用程序类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7491284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com