![](/img/trans.png)
[英]How to detect the type of a transaction: JTA or Resource Local from java code?
[英]How to detect application type in Java code
假设我们有一个Java包。 该软件包可在任何地方使用。 但是,此程序包中有一些代码取决于上下文。 例如,如果使用此程序包的应用程序是一个Web应用程序,我们需要通过调用一个函数来执行某些任务,而如果该应用程序是一个控制台应用程序,则需要通过调用相同的函数来执行其他任务。
这是我的问题:
Java中是否有任何方法可以在代码内检测到应用程序是作为Web应用程序还是作为控制台运行的? 我感谢任何帮助:)
作为一个真实的例子,Web和控制台应用程序加载属性文件的方式是不同的。
对于Web应用程序,我们可能使用this.getClass().getClassLoader().getResourceAsStream(url)
;对于控制台应用程序,我们可能使用new FileInputStream(physical path)
。
最好在某个地方设置一个build属性,而不是尝试检测您的应用程序类型,因为我认为没有可靠的方法可以做到这一点。
此外,您不应尝试检测应用程序类型,因为根据现代体系结构原理,您的视图层(Web,桌面或控制台)应易于互换。
回应您的最后评论。
正如用户384706所说,在IMO中DI是正确的选择。 我将以春天为例。
在控制台和Web应用程序部分中,您都可以:
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()
方法。
在春季,您可以:
<bean id="consolePropertyProvider" class="com.company.ConsolePropertyProvider"/>
<bean id="myConsoleService" class="com.company.MyConsoleService">
<property name="propertyProvider" ref="consolePropertyProvider" />
</bean>
还有您的WebService
和WebPropertyProvider
的同一对Bean定义。
只需使用依赖注入
只需放置所有适当的参数即可通过设置器来配置您的库,并让容器或应用程序使用DI相应地对其进行配置。
因此,您无需检查哪种恕我直言是不好的方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.