标签: guice

哪个Java Web Framework最适合Google Guice?

我打算开始一个新项目,并且正在研究当前最先进的Java Web框架.我决定围绕Guice构建我的应用程序,并且可能使用像Squill/JEQUEL/JaQu或类似的非常轻量级的ORM,但我无法决定Web框架.哪一个最适合这种轻量级环境?哪一个最好与Guice整合?

java dependency-injection guice

20
推荐指数
2
解决办法
6984
查看次数

是否有相应的CDI(WELD)来构建定义(如Guice模块中所做的那样),然后创建一个Injector?

我喜欢Guice如此直接地手动创建自己的模块的方式,每个模块都有自己的代码绑定.另一方面,CDI似乎更多地依赖于魔术而不是程序化访问sest绑定.我错了,或者如何用WELD达到同样的效果.

任何代码示例将不胜感激......

澄清

我希望使用Guice在http://code.google.com/p/google-guice/上提供的构建器模式样式,以编程方式构建一个模块(Guice术语,我不确定CDI术语).

我正在构建一个动态系统,我需要能够绑定类型(如接口),常量等,而不仅仅是让Weld动态扫描类路径等并查找和注册类型.我相信CDI是静态的,javax.inject包不包含允许以编程方式将类型绑定到实现的任何接口.

澄清第2部分

原始问题的基本前提是简单的观察,即注释被烘焙,并且在其中定义的规则可以帮助无法更改注释器.我最初希望公共访问CDI类路径扫描程序用于构建内部使用定义的相同接口.基本上我说的是,我想要一个允许我读取注释并为容器创建定义的图层.默认提供程序可以是执行现在发生的操作的提供程序,但如果您需要其他策略,则可以执行此操作.

当前方法的一个问题是不能重用具有不同注释的组件(类)来选择不同的协作者的限制.在您跳转之前让我对此声明进行限定,是的,可以通过提供商等来完成,但这会导致更多的工件.应该有一个更简单的方法.

例1

很抱歉,如果这个例子不好,我的用例就会更加复杂,细节也会受到阻碍,并且需要更长时间的阅读.

想象一下有一个url重写组件,为了论证,有一些参数,如

  • 用该模式替换此模式.
  • 也许是一个html清洁工

如果您希望使用两个不同的替换规则注入相同的组件但是使用html清洁器注入器,则卡住了.当然有办法解决这个问题,但他们需要人工制品,这当然是更多的代码.

遗憾的是,所有绑定规则都在类而不是实例上,因此每次你要求一个类时,你都会得到几乎相当于实例的实例.

焊接

这个问题是在一段时间之前写的,我已经放弃了Weld.我相信它决定魔术如何完成的方式是错误的.我不喜欢这样的事实,即如果没有为我提供控制何时或如何重复此操作的方法,他们会向我发出这种情况.我不喜欢这种不灵活性.

guice cdi jboss-weld

19
推荐指数
1
解决办法
913
查看次数

JUnit测试中的Guice注入器

使用Guice,在每个JUnit测试类中获取一个新的注入器是一个好习惯,因为每个测试类应该是独立的吗?

java junit guice code-injection

19
推荐指数
5
解决办法
5万
查看次数

什么是CDI的实例或Guices Provider的Spring等价物

在CDI中,您可以使用以下命令定义一个对象,该对象将为您提供特定类型的项目:

@Inject
Instance<MyObject> myObjectInstance;
//...
MyObject myObjectInstance.get();

同样在Guice中你可以做到:

@Inject
Provider<MyObject> myObjectInstance;
//...
MyObject myObjectInstance.get();

我想知道Spring中是否有类似的构造,或者你必须使用它ApplicationContext才能获得引用?

java spring guice cdi

19
推荐指数
1
解决办法
4418
查看次数

在Java中实现动态插件

我想在Java应用程序中实现动态插件功能.理想的情况是:

  • 应用程序将Plugin使用类似的方法定义接口getCapabilities().
  • 插件将是一个pluginX.jar包含PluginXImpl实现Plugin(可能还有其他一些)的类的JAR .
  • 用户将放入pluginX.jar特殊目录或设置指向它的配置参数.用户不一定必须包含pluginX.jar在他们的类路径中.
  • 应用程序会找到PluginXImpl(可能通过JAR清单,可能通过反射)并将其添加到注册表中.
  • 客户端可以PluginXImpl例如通过调用类似的方法来获取实例getPluginWithCapabilities("X").用户不一定必须知道插件的名称.

我有一种感觉,我应该能够用peaberry做到这一点,但我无法理解文档.我花了一些时间学习Guice,所以我的首选答案不是"使用Spring Dynamic Modules".

任何人都可以给我一个简单的想法,如何使用Guice/peaberry,OSGi,或只是简单的Java?

java plugins osgi guice peaberry

18
推荐指数
1
解决办法
7318
查看次数

Android上的Guice性能

作为一名Java开发人员,我已经习惯于在应用程序中使用依赖注入.对于Android,我对性能特别警惕.在Android应用中使用Guice有什么性能影响?我假设有一些开销,但它是否足够重要,我应该避免使用Guice?

我对它的使用可能只是将一些共享对象注入到各种活动中.

java android dependency-injection guice

18
推荐指数
3
解决办法
5317
查看次数

与Guice一起摇摆

我已经在使用Guice作为我的应用程序的数据模型,到目前为止我对此非常满意.然而,GUI部分即将成为一个泥球大球.我觉得这里很难使用Guice,因为Swing组件和模型紧密耦合,并且经常强制执行某个初始化顺序.

我的应用程序基本上包含一个包含大量过滤器的标题,一个中心且非常复杂的JTree组件,以及许多操作(例如来自JPopup),菜单,对话框,向导等.主要问题是我有很多组件和动作之间的耦合(例如复杂的验证,树更新......).你能给我一些如何用Guice构建GUI的建议吗?

我知道像GUTS这样的库,但文档很薄,我宁愿避免在我的项目中添加另一个依赖项并学习另一个API(例如我不知道Swing应用程序框架).

java user-interface swing guice

18
推荐指数
1
解决办法
2320
查看次数

如何使用Guice获取接口的所有实现者/子类?

使用Spring,您可以定义一个数组属性,并让Spring注入从给定类型派生的每个(@Component)类中的一个.

在Guice中有相同的效果吗?或者是一个添加此行为的扩展点?

java guice

18
推荐指数
2
解决办法
4930
查看次数

Guice:如何获取TypeLiteral包装泛型的实例?

我有一个通用的数据库访问类,我使用TypeLiteral结构进行绑定.现在在测试中我想模拟该类,并且我已经创建了一个Provider,它创建了一个模拟实例.在我的测试中,我想访问该模拟来定义其行为.现在的问题是,我如何从注射器中检索物体?

这是我的约束定义:

binder.bind(new TypeLiteral<GenericDbClass<Integer>>(){}).GenericDbClassProvider.class);
Run Code Online (Sandbox Code Playgroud)

通常我会得到这样的实例:

injector.getInstance(GenericDbClass.class);
Run Code Online (Sandbox Code Playgroud)

但由于我没有将GenericDbClass的实现绑定到接口本身,我不知道该怎么做.我认为复杂吗?

任何想法/帮助非常感谢!

java guice

18
推荐指数
1
解决办法
1万
查看次数

Generics Hell:我可以使用泛型构建TypeLiteral <Set <T >>吗?

我能够使下面的通用方法工作的唯一方法是传递看似冗余的TypeLiteral<Set<T>>参数.我认为应该可以在给定其他参数的情况下以编程方式构造此参数,但无法弄清楚如何.

protected <T> Key<Set<T>> bindMultibinder(
 TypeLiteral<Set<T>> superClassSet, TypeLiteral<T> superClass) {
   final Key<Set<T>> multibinderKey = Key.get(superClassSet, randomAnnotation);
   return multibinderKey;
}
Run Code Online (Sandbox Code Playgroud)

客户端代码如下:

bindMultibinder(new TypeLiteral<Set<A<B>>>(){}, new TypeLiteral<A<B>>(){});
Run Code Online (Sandbox Code Playgroud)

其中A和B是接口.

如果我尝试以下(删除TypeLiteral<Set<T>> superClassSet参数),我会收到java.util.Set<T> cannot be used as a key; It is not fully specified.运行时错误.

protected <T> Key<Set<T>> bindMultibinder(TypeLiteral<T> superClass) {
   final Key<Set<T>> multibinderKey = Key.get(
    new TypeLiteral<Set<T>>() {}, randomAnnotation);
   return multibinderKey;
}
Run Code Online (Sandbox Code Playgroud)

java generics types set guice

18
推荐指数
2
解决办法
4838
查看次数