Tag: guice

Guice – 使用静态辅助方法将依赖项注入到类中

我还是Guice的新手,之前没有使用任何DI框架。 在阅读官方维基和许多其他文件后,我仍然无法完全绕过它。 在我的特定情况下,我想编写一个使用其他(待注入)类的EL taglib函数。 因为所有taglib函数都必须声明为static,所以我不能只通过构造函数或setter @Inject我的依赖项。 我想过使用http://code.google.com/p/google-guice/wiki/Injections#Static_Injections中描述的requestStaticInjection()方法但是我无法让它工作并且找不到任何好处教程。 在此先感谢您的帮助, 阿尔曼

在pg_stat_activity中具有“空闲”状态的持久“COMMIT”查询

如果我查询: select * from pg_stat_activity where application_name ~ ‘example-application’; 我得到很多行,状态是idle ,查询是COMMIT 。 它们持久耐用,不会消失。 一段时间后,我的应用程序达到hibernate.c3p0.max_size (池中的最大JDBC连接数)限制并停止使用数据库。 一些应用程序实现细节在其他SO线程中描述: 线程池中的Guice DAO Provider – 查询变为“在转换中空闲” 为什么会这样? 如何解决这个问题呢?

Google Guice是否有效?

一年多没有发布,甚至没有小错误修正。 提交到存储库的次数很少,过去两个月没有提交。 使用此库启动新项目是否安全?

如何在Guice中进行需要注入实例的动态绑定?

我想创建一个模块,动态地将实例绑定到命名注释。 用例是我想自动绑定配置中的值,属性文件中的键是@Named值。 但是配置绑定在不同的模块中,所以我需要注入配置。 我看过的解决方案是: 在configure()方法中绑定。 没有注入此方法,我无法获得基本配置。 使用Provider / @提供。 提供者只绑定一个实例。 使用MultiBinder。 我的用例与此扩展提供的内容略有不同。 多重绑定允许您单独绑定多个实例,然后将它们作为包含更复杂类型的集合注入。 我想分别绑定每个实例,并通过唯一可识别的方式将它们用于注入后者。 使用childInjector。 不幸的是,如果不对现有代码进行大量修改,这是不可能的 这个答案是如何以这种方式解决这个问题的非常好的描述。 以某种方式注入活页夹。 (我开始变得有些讨厌)Guice允许注射Injector供后者使用,我尝试通过@Provides方法将Binder注入模块,然后直接使用binder在方法中进行多次绑定。 Guice不会注射粘合剂。

播放2.0 / 2.1 for Java和dependency injection

我们有一个新的Play 2.0项目,我们计划在添加一些复杂的第三方集成代码时引入DI。 有一个适用于Play 2.0的Guice插件,但看起来它在2.1时已经过时了,我有一种预感2.1不再那么远了。 https://github.com/typesafehub/play-plugins/tree/master/guice Guice是Play 2.0 / 2.1的安全赌注,还是我们应该考虑其他选择?

如何将一些类的创建从Guice注入器委托给另一个工厂?

例如,RESTEasy的ResteasyWebTarget类有一个方法proxy(Class clazz) ,就像Injector的getInstance(Class clazz) 。 有没有办法告诉Guice应该将某些类的创建委托给某个实例? 我的目标是Guice的以下行为:当要求注入器获得A类的新实例时,尝试实例化它; 如果实例化是不可能的,请询问另一个对象(例如ResteasyWebTarget实例)来实例化该类。 我想写一个这样的模块: @Override protected void configure() { String apiUrl = “https://api.example.com”; Client client = new ResteasyClientBuilder().build(); target = (ResteasyWebTarget) client.target(apiUrl); onFailureToInstantiateClass(Matchers.annotatedWith(@Path.class)).delegateTo(target); } 代替 @Override protected void configure() { String apiUrl = “https://api.example.com”; Client client = new ResteasyClientBuilder().build(); target = (ResteasyWebTarget) client.target(apiUrl); bind(Service1.class).toProvider(() -> target.proxy(Service1.class); bind(Service2.class).toProvider(() -> target.proxy(Service2.class); bind(Service3.class).toProvider(() […]

是否有可能在Guice范围结束时自动清理资源?

假设我使用请求范围通过Guice注入了一个Closeable对象: @Provides @RequestScoped public MyCloseableResource providesMyCloseableResource(){ return new MyCloseableResourceImpl(); } 是否有可能连接一个清理方法,当范围存在时,该方法会自动调用我的资源上的close() ,而不需要求助于自定义范围实现? 查看Guice wiki上的自定义范围实现指南 ,它显示应该创建和清理范围,如下所示: /** * Runs {@code runnable} in batch scope. */ public void scopeRunnable(Runnable runnable) { scope.enter(); try { // explicitly seed some seed objects… scope.seed(Key.get(SomeObject.class), someObject); // create and access scoped objects runnable.run(); } finally { scope.exit(); } } 我想知道是否有办法在finally的内置范围(特别是会话和请求范围)中连接一些自定义清理代码。 如果不可能,可能会出现阻碍这种自动清理的问题吗? […]

Google Auto Factory:未使用@Provided注释?

所以我正在尝试谷歌汽车工厂,但我得到一个奇怪的错误。 工厂类: @AutoFactory( className = “MembersAdapterFactoryImpl” ) public class MembersAdapter extends ArrayAdapter { /** * Get an instance of the helper */ private MembersAdapterHelper mMembersAdapterHelper; public MembersAdapter(@Provided MembersAdapterHelper membersAdapterHelper, Context context, int resource, List members){ super(context, resource, members); mMembersAdapterHelper = membersAdapterHelper; } } 生成的类: package me.magneto.groups.adapters; import javax.annotation.Generated; import javax.inject.Inject; import javax.inject.Provider; @Generated(“com.google.auto.factory.processor.AutoFactoryProcessor”) public final […]

MyBatis-guice 3.3 +多个数据源+属性+ scriptrunner

我正在使用MyBatis-guice 3.3使用java Properties对象和ScriptRunner连接到第一个数据库来运行几个脚本: Environment environment = injector.getInstance(SqlSessionFactory.class).getConfiguration().getEnvironment(); DataSource source = environment.getDataSource(); ScriptRunner runner = new ScriptRunner(source.getConnection()); runner.setLogWriter(null); runner.setStopOnError(true); runner.runScript(Resources.getResourceAsReader(properties.getProperty(“script.dbA.create.schema”))); 现在我想使用相同的方法添加第二个数据源(dbB)。 按照MyBatis-guice参考指南,我必须使用2个PrivateModule。 这部分工作正常。 但是,我应该如何调用我的ScriptRunner为dbA运行一些脚本,为dbB运行一些其他脚本?

Guice – Jersey – Servlet绑定

我最近切换到两阶段注入,这在我的servlet绑定中创建了一个错误。 我目前正在两种错误模式之间切换,不确定哪种方向最好。 我遇到的第一个错误是: com.sun.jersey.api.container.ContainerException:ResourceConfig实例不包含任何根资源类。 我的servlet模块看起来像这样: public class MyServletModule extends JerseyServletModule { @Override protected void configureServlets() { bind(MyServlet.class).asEagerSingleton(); serve(“/*”).with(GuiceContainer.class); } } 我能够通过显式提供com.sun.jersey.config.property.packages参数来删除此错误。 public class MyServletModule extends JerseyServletModule { @Override protected void configureServlets() { bind(MyServlet.class).asEagerSingleton(); Map parameters = new HashMap(); parameters.put(PackagesResourceConfig.PROPERTY_PACKAGES, MyServlet.class.getPackage().getName()); serve(“/*”).with(GuiceContainer.class, parameters); } } 但是当我这样做时,Guice会尝试一个Just in Time绑定,它不尊重我的servlet构造函数上的@Inject。 com.google.inject.ConfigurationException:Guice配置错误: 1)无法为MyServlet创建绑定。 它已经在MyServletModule.configureServlets绑定的一个或多个子注入器或私有模块上配置(MyServletModule.java:44)如果它在PrivateModule中,您是否忘记公开绑定? 在找到MyServlet时 com.google.inject.internal.InjectorImpl.getBinding上的1个错误(InjectorImpl.java:150) 我的servlet有一个@Inject构造函数,它的参数不能及时绑定。 在调试InjectorImpl之后,我相信当我使用PROPERTY_PACKAGES时这就是失败的原因。 我只是不确定使用PROPERTY_PACKAGES是否正确,我需要修复一些绑定? […]