我是Java初学者,如果有人在这里可以解释如何在Java中实现Martin Fowler的插件模式,我将不胜感激.
提前致谢.
我有一个部署为EAR文件的J2EE应用程序,该文件又包含业务层代码(包括一些EJB)的JAR文件和Web层代码的WAR文件.EAR文件部署到JBoss 3.2.5,它解压缩EAR和WAR文件,但不解压缩JAR文件(这不是问题,只是FYI).
JAR文件中的一个文件是MS Word模板,其绝对路径需要传递给某些本机MS Word代码(使用Jacob,FWIW).
问题是,如果我尝试获取这样的文件(从JAR文件中的一些代码中):
URL url = getClass().getResource("myTemplate.dot");
File file = new File(url.toURI()); // <= fails!
String absolutePath = file.getAbsolutePath();
// Pass the absolutePath to MS Word to be opened as a document
Run Code Online (Sandbox Code Playgroud)
...然后java.io.File构造函数抛出IllegalArgumentException"URI不是分层的".URL和URI都具有相同的toString()输出,即:
jar:file:/G:/jboss/myapp/jboss/server/default/tmp/deploy/tmp29269myapp.ear-contents/myapp.jar!/my/package/myTemplate.dot
Run Code Online (Sandbox Code Playgroud)
这条路径的大部分在文件系统上是有效的,但其余路径不是(在JAR文件的内部):
G:/jboss/myapp/jboss/server/default/tmp/deploy/tmp29269myapp.ear-contents
Run Code Online (Sandbox Code Playgroud)
获取此文件的绝对路径最简单的方法是什么?
像大多数Web开发人员一样,我非常享受固态MVC架构对Web应用程序和站点的好处.使用PHP进行MVC时,自动加载显然非常方便.
我已成为spl_autoload_register过度简单定义单个__autoload()函数的粉丝,因为如果要合并每个使用自己的自动加载的不同基本模块,这显然会更灵活.但是,我从来没有对我写的加载函数感到满意.它们涉及大量字符串检查和目录扫描,以便查找可能加载的类.
举例来说,假设我有一个具有被定义为基本路径的应用程序PATH_APP和一个简单的结构,命名的目录models,views和controllers.我经常使用命名结构来命名文件IndexView.php并IndexController.php在相应的目录中,默认情况下模型通常没有特定的方案.我可能有一个这样的结构的加载器函数,注册时spl_autoload_register:
public function MVCLoader($class)
{
if (file_exists(PATH_APP.'/models/'.$class.'.php')) {
require_once(PATH_APP.'/models/'.$class.'.php');
return true;
}
else if (strpos($class,'View') !== false) {
if (file_exists(PATH_APP.'/views/'.$class.'.php')) {
require_once(PATH_APP.'/views/'.$class.'.php');
return true;
}
}
else if (strpos($class,'Controller') !== false) {
if (file_exists(PATH_APP.'/controllers/'.$class.'.php')) {
require_once(PATH_APP.'/controllers/'.$class.'.php');
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
如果之后没有找到它,我可能有另一个函数来扫描models目录中的子目录.但是,所有if/else-ing,字符串检查和目录扫描对我来说似乎效率低下,我想改进它.
我很好奇其他开发人员可能采用的文件命名和自动加载策略.我正在寻找专门用于高效自动加载的良好技术,而不是自动加载的替代方案.
我想为Symbian OS手机开发应用程序,并尝试使用Java编程以外的其他轨道.我想体验如何使用C和C++在手机上编程.
您能否提供一些关于开发此类应用程序的工具的提示.我正在瞄准诺基亚手机..
我正在尝试使用Launchctl来启动svnserve进程,但我一直收到一条错误消息"没有返回plist:/Library/LaunchAgents/org.tigris.subversion.svnserve.plist".这是svnserve是/ opt/local/bin/svnserve的地方,这是plist文件任何想法这里可能有什么问题?
<dict>
<key>Disabled</key>
<false/>
<key>Label</key>
<string>org.tigris.subversion.svnserve</string>
<key>ProgramArguments</key>
<array>
<string>/opt/local/bin/svnserve</string>
<string>--inetd</string>
<string>--root=/Users/Sunit/Repositories</string>
</array>
<key>ServiceDescription</key>
<string>SVN Version Control System/string>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<array>
<dict>
<key>SockFamily</key>
<string>IPv4</string>
<key>SockServiceName</key>
<string>svn</string>
<key>SockType</key>
<string>stream</string>
</dict>
<dict>
<key>SockFamily</key>
<string>IPv6</string>
<key>SockServiceName</key>
<string>svn</string>
<key>SockType</key>
<string>stream</string>
</dict>
</array>
</dict>
Run Code Online (Sandbox Code Playgroud) 我有一个关于依赖注入的问题.
说我想创建一个类调用它,WebGetTask
WebGetTask需要依赖HttpService
坏代码1代码:
private HttpService httpService;
...
List<WebGetTask> list = new ArrayList<WebGetTask>();
for(...)
{
list.add(new WebGetTask(httpService));
}
...
Run Code Online (Sandbox Code Playgroud)
好.我知道这很糟糕,因为注入了httpService,但它从未使用过,除了在新的WebGetTask上创建
好坏代码2代码:
private WebGetTaskFactory webGetTaskFactory;
...
List<WebGetTask> list = new ArrayList<WebGetTask>();
for(...)
{
list.add(webGetTaskFactory.newTask());
}
...
Run Code Online (Sandbox Code Playgroud)
我认为这更好,因为我们使用工厂但......
从我所在的位置,我可以看到在WebGetTaskFactory中我们仍然注入一个HttpService并且没有对它做任何事情,除了创建一个新的WebGetTask的唯一目的
所以回顾一下我的问题是如何设计一个工厂类(WebGetTaskFactory),当新对象在其构造函数上需要依赖项(HttpService)而不是简单地注入和传递依赖项(HttpService)时,它会创建新对象(WebGetTask)?或者更确切地说,这是这样做的方式吗?如果是这样,那么一切都很好,如果不是,那么请指导我如何正确使用DI和工厂模式.谢谢.
例如,可以在整个MSDN文档中找到以下演员:
(LPTSTR)&lpMsgBuf
Run Code Online (Sandbox Code Playgroud)
我应该把它转换成:
static_cast<LPTSTR>(&lpMsgBuf);
Run Code Online (Sandbox Code Playgroud)
或者我应该留下所有惯用的C-esque Win32部分,因为它们通常在文档中找到,并为我的其余代码保存更惯用的C++样式/用法?
我试图找出如何下载Git存储库的特定标记 - 它是当前版本背后的一个版本.
我在git网页上看到了以前版本的标签,对象名称为长十六进制数.
但Tagged release 1.1.5根据网站版本名称是" ".
我尝试了这样的命令(名称已更改):
git clone http://git.abc.net/git/abc.git my_abc
Run Code Online (Sandbox Code Playgroud)
我确实得到了一些东西 - 一个目录,一堆子目录等.
如果它是整个存储库,我如何获得我正在寻找的版本?如果没有,我该如何下载该特定版本?
我已经开始使用Tcl对桌面应用进行原型设计,并打算将这个想法提交给一些风险资本家.桌面应用程序和Tcl都不流行,所以我想准备好反对对这项技术的任何反对意见.以下是我看到他们的专业人士,我期待充实利益,我很有信心,但希望还有更多的优点.
我理解潜在的骗局是"Tk UI很难看",但如上所述,Tk UI将用于原型,而且无论如何,Tk是一个丑陋的问题,已经由你真正提出过了:为什么要考虑Tk GUI丑陋?