我正在为Web API构建客户端SDK并尝试通过guice应用依赖注入.第三方将使用此Java客户端作为访问API的方式.
我希望能够注入我的外部依赖项(使用的HTTP客户端等),并为开发人员提供一种方法,如果他们想要或者我自己想要更改实现,则可以注入不同版本的这些依赖项(依赖项的一个很好的例子)注射对吗?).
但是为了连接依赖项,我必须让我的库的用户创建一个注入器等,如下所示:
Injector injector = Guice.createInjector(new MyAPIClientModule(url, username, password));
this.service = injector.getInstance(MyAPIService.class);
Run Code Online (Sandbox Code Playgroud)
我不想把它推到我的库的用户,但我仍然希望让用户能够选择不同的实现或底层HTTP库等.
我在某种程度上错过了guice或DI的观点吗?这是使用guice时的标准做法吗?
或者我应该将它包装在另一个执行注入的类中,并向第三方用户提供一个示例Java对象?
根据以下机票:https://www.mulesoft.org/jira/browse/MULE-6427对于NullPayload我应该能够使用:
<when expression="#[payload == null]">
Run Code Online (Sandbox Code Playgroud)
但那失败了.所以我必须使用:
<when expression="#[payload is NullPayload]">
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?或者这是检查的正确方法null还是NullPayload?
我很难理解Git流如何与Github一起工作.
Github允许集成更改的fork/pull请求模型,其中整个上游repo及其所有分支都被复制到fork中.
然后使用git flow,我将分支dev开发分支说然后完成后我的更改将合并到我的fork的dev分支而不是上游.因此,当一个pull请求返回到上游repo时,它会将dev(fork)合并到dev(上游),但这会丢失我所存在的所有功能分支等知识.
因此,为了让Git流正常工作,我是否需要停止分配repo并直接在上游repo中创建功能分支?
所以fork/pull应该与git flow分开吗?
我正在从SFTP服务器处理Mule中的大型csv文件.
我需要从输入目录中读取它,将其移动到tmp目录,完成后将其移动到存档目录.
前两个我可以轻松完成.但完成后将其移动到存档文件夹的最佳方法是什么?
sftp传输上的archiveDir选项仅在运行mule但不在远程sftp服务器上的本地服务器上归档副本.
使用flow-ref使用私有流来引用另一个流或在请求 - 响应样式中使用vm端点有什么区别?
他们都有自己的处理,线程和异常策略?有什么好处或规则何时使用一个而不是另一个?
我试图从主同步流调用异步私有流,如下所示:
<flow name="main" doc:name="main" processingStrategy="synchronous">
<poll frequency="10000">
<set-payload value="main"></set-payload>
</poll>
<flow-ref name="async-private" />
<flow-ref name="private" />
</flow>
<flow name="private" processingStrategy="synchronous">
<logger level="ERROR" message="sync" />
</flow>
<flow name="async-private" processingStrategy="asynchronous">
<logger level="ERROR" message="async" />
</flow>
Run Code Online (Sandbox Code Playgroud)
但它不起作用并导致以下异常:
无法异步处理同步事件.消息有效内容的类型为:String(org.mule.api.MessagingException)
这里发生了什么?
UPDATE
如果我将async flow-ref包装在<async>标签中,它就可以工作.但为什么我需要这样做呢?这是一个错误吗?
在Java中,我最近看到很多库都有包含方法的类,这些方法总是返回类的实例,因此您可以调用多个方法而无需单独的代码行.例如:
public class Resource{
public Resource path(String path)
//execute some code
return this;
}
Run Code Online (Sandbox Code Playgroud)
所以你可以做这样的事情
new Resource.path("1").path("2").path("3")
Run Code Online (Sandbox Code Playgroud)
而不是冗长:
public void path(String path)
Resource r = new Resource();
r.path("1");
r.path("2");
r.path("3");
Run Code Online (Sandbox Code Playgroud)
这种模式是否有名称,是好/坏的做法?
我正在寻找有关测试Mule应用程序的最佳实践的一些指导.
例如,我将我的逻辑分成多个私有流并使用flow-ref将它们绑定在一起.
然后我使用Munit来模拟流程参考,以便隔离测试流程.
这对我来说似乎是单元测试并将流程视为方法等.
这是测试Mule应用程序的有效方法吗?
我是否还应该编写功能测试来测试这些所有在没有和模拟流程的情况下一起工作?
我有一个接收到的Java应用程序Scala Stream。
我需要将其转换为Java Stream。
如何在Java中做到这一点?