public class MyInjectableProvider extends PerRequestTypeInjectableProvider<Context, MyInjectable> {
public MyInjectableProvider() {
super(MyInjectable.class);
}
@Override
public Injectable<MyInjectable> getInjectable(ComponentContext ic, Context context) {
MyInjectable myInjectableInstance = //...
return new Injectable<MyInjectable>() {
@Override
public MyInjectable getValue() {
return myInjectableInstance;
}
};
}
}
public class MyInjectableProvider extends AbstractBinder
implements Factory<MyInjectable> {
@Override
protected void configure() {
bindFactory(this).to(MyInjectable.class);
}
@Override
public MyInjectable provide() {
return getMyInjectable();
}
@Override
public void dispose(MyInjectable instance) {}
}
public class MyResourceConfig extends ResourceConfig {
public MyResourceConfig() {
register(new MyInjectableProvider());
}
}
在Factory
中注册可注入的CloseableService
可以完成您想要的大部分工作,而不是Factory
。需要CloseableFactory
适配器。CloseableService
在退出请求范围时关闭()
所有注册的资源。
有关特定示例,请参阅下面的ConnectionFactory
。
import org.glassfish.hk2.api.Factory;
import org.glassfish.jersey.server.CloseableService;
import javax.inject.Inject;
import javax.ws.rs.InternalServerErrorException;
import java.sql.Connection;
import java.sql.SQLException;
import static com.google.common.base.Preconditions.checkNotNull;
public class ConnectionFactory implements Factory<Connection> {
private final CloseableService closeableService;
@Inject
public ConnectionFactory(CloseableService closeableService) {
this.closeableService = checkNotNull(closeableService);
}
public Connection provide() {
final Connection connection;
try {
connection = acquireConnection();
} catch (SQLException e) {
throw new InternalServerErrorException(e);
}
try {
closeableService.add(new CloseableConnection(connection));
} catch (Throwable t) {
closeQuietly(connection);
throw runtime(t);
}
return connection;
}
public void dispose(Connection connection) {
closeQuietly(connection);
}
private static RuntimeException runtime(Throwable t) {
throw ConnectionFactory.<RuntimeException>unchecked(t);
}
private static <T extends Throwable> T unchecked(Throwable t) throws T {
throw (T) t;
}
private static void closeQuietly(Connection connection) {
try {
connection.close();
} catch (SQLException ignore) {}
}
}
下面是CloseBleFactory
-CloseableConnection
的一个不太通用的版本。
import java.io.Closeable;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import static com.google.common.base.Preconditions.checkNotNull;
public final class CloseableConnection implements Closeable {
private final Connection connection;
public CloseableConnection(Connection connection) {
this.connection = checkNotNull(connection);
}
public void close() throws IOException {
try {
connection.close();
} catch (SQLException e) {
throw new IOException(e);
}
}
}
我已经通过Guice侦听器为一组特定的请求设置了一个过滤器,即*/dispatch。 在这个筛选器中,我希望根据请求URI更改每个请求中类型BaseService(包含一个方法的接口)的绑定。例如,如果URI是/hello/dispatch,我希望BaseService绑定到HelloServiceImpl;如果URI是/bye/dispatch,我希望绑定到ByeServiceImpl。两者都实
问题内容: 快速使用以下语法进行流控制 在这种情况下 ,真值上下文的语义是什么 ? 是否允许 表达式链接 (如下所示)? 如果是这样,布尔表达式是否会短路? 问题答案: 首先检查它是否为零或是否有数据。如果为零,则不会执行if语句。如果有数据,则将数据解包并分配给if语句的范围。然后执行括号内的代码。 无法在一个if语句中链接此功能。不直接评估为布尔值。最好将“ if let”视为一个特殊关键字。
问题内容: 我有一个带有GET处理程序的简单控制器,该处理程序接受一个对象来绑定请求参数: 这是一个简单的POJO类: 一切正常,但我想摆脱设置者,使该对象不可变为公共使用。在Spring 5.0.2 之前的处理程序方法文档中,我们了解到可能的有效方法参数是: 命令或表单对象将请求参数绑定到Bean属性(通过设置器) 或直接 绑定 到字段 是否可以以某种方式覆盖默认的Spring Boot配置,以
null 筛选器的示例路径:
我正在使用JSF 2.1Hibernate4.1.7Spring3.2.1Spring安全SQLServer2012的Web应用程序工作。一切正常,即CRUD操作。但有些方法需要处理 2 个或更多实体(更新、添加等),例如 如果在执行第2行(创建实体)时出现错误,我需要合并的实体(或更新、创建)或之前的DB函数来获得回滚,以便我的DB上的数据保持正确 我将与Spring注释结合使用。 在我的< c
我想使用Spring MVC 和Hibernate。我不想在所有控制器方法上使用服务层或属性(或者,更确切地说,我希望Spring将它们全部视为事务性)。因此,我想在控制器方法开始使用数据库时启动事务,并在控制器方法返回 ViewAndModel 或回滚事务(如果发生任何错误)时提交事务。此外,我希望视图支持延迟Hibernate加载,例如,如果html模板请求,请在自动提交模式下选择数据。 我知