我是Google Guice的新手并且从概念上理解依赖注入,但是在尝试将其合并到我的应用程序中时遇到了问题.我的具体问题是关于Singleton对象.这是一个例子:
首先,我的Module类,它将重的Singleton Connection接口绑定到它的实现.
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(Connection.class).to(MyConnection.class).asEagerSingleton();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在我的main方法中,我实例化我的应用程序服务器并注入Connection:
public class MyApplication {
@Inject
public MyApplication(Connection cxn) {
}
public static void main(String[] args) {
Injector injector = Guice.createInjector(new MyModule());
MyApplication app = injector.getInstance(MyApplication.class);
// Start application, add ShutdownHook, etc...
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都很好......现在,我有一些利用我的Connection对象的DAO类,但是使用静态方法检索如下:
public class MyConfiguration {
private Config conf;
private Connection cxn; // Would like to have this injected
private MyConfiguration(Config conf) {
this.conf = conf;
}
public static …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来结合功能synchronized
和功能java.util.concurrent.locks.ReentrantReadWriteLock
.更具体地说,我想要一个方法只在WriteLock
设置时锁定,但我希望锁定在一个对象变量上synchronized
.以下是有助于解释的示例:
ReentrantReadWriteLock示例
public void methodOne(String var) {
lock.writeLock().lock;
try {
// Processing
}
finally {
lock.writeLock().unlock();
}
}
public void methodTwo(String var) {
lock.readLock().lock;
try {
// Processing
}
finally {
lock.readLock().unlock();
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,methodTwo
只要writeLock
on methodOne
未被锁定,就可以无阻塞地调用.这很好,我正在寻找的功能,但是当它writeLock
被锁定时,它被锁定所有情况var
.相反,我希望它只能像以下var
一样锁定synchronized
:
同步示例
public void methodOne(String var) {
synchronized(var) {
// Processing
}
}
public void methodTwo(String var) {
synchronized(var) {
// Processing
}
} …
Run Code Online (Sandbox Code Playgroud) 我写使用CXF框架(版本:2.7.8)SOAP客户端为SharePoint 2007年我跟随添加NTLM支持的在线文档这里.我有客户工作和跟踪的HTTP会话显示NTLM凭据被发送,但是,我仍然收到401未授权的响应.
码:
Lists listService = new Lists();
ListsSoap port = listService.getListsSoap();
BindingProvider bp = (BindingProvider) port;
bp.getRequestContext().put("use.async.http.conduit", Boolean.TRUE);
Credentials creds = new NTCredentials(USER, PASS, "", DOMAIN);
bp.getRequestContext().put(Credentials.class.getName(), creds);
Client client = ClientProxy.getClient(proxy);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(36000);
httpClientPolicy.setAllowChunking(false);
httpClientPolicy.setAutoRedirect(true);
http.setClient(httpClientPolicy);
// Build request and execute
Run Code Online (Sandbox Code Playgroud)
有趣的是,我使用HTTP PUT为WebDAV编写了一个类似的客户端,使用Apache HTTPClient库上传文档,并且能够使用NTLM成功进行身份验证.此外,我能够使用SOAPUI来调用我正在尝试构建Java客户端的相同列表Web服务,并且它也使用NTLM成功进行了身份验证.
我假设NTLM的实现在CXF和HTTPClient之间是不同的.有关我的CXF实施有什么问题的想法?或者我如何让它镜像HTTPClient实现?