番石榴中的许多功能都是由静态方法提供的.我还没有弄清楚如何合并使用番石榴库和良好的依赖注入实践.
例如,如果我要使用
Files.readLines(File, Charset)
Run Code Online (Sandbox Code Playgroud)
然后我发现我很难编写一个不接触文件系统的单元测试,我只想进行集成测试.
我想我可以为我感兴趣的所有人写一个适配器吗?但这可能最终会成为很多工作......
我觉得很奇怪,番石榴库来自同一组提供吉斯人,写博客帖子喜欢这
我目前有一个命令行工具,它使用Guice及其扩展程序.
完成该工具的功能后,我确定性能不合标准,并使用简单的hprof开始分析.
这已经指出,仅创建Injector是一个重要的性能问题.我通常避免在模块中做任何实际工作,并为Providers保留计算密集型工作......
有了这个,Guice的一般性能指南是什么?我应该避免使用@AssistedInject和FactoryModuleBuilders吗?尽可能避免@Singletons?确保所有绑定都是显式的并避免JIT绑定?
我一直在搜索,但除了人们说它真的很快之外,它无法真正找到解决基本Guice性能的问题.
我有一个管理器类,其中包含可访问元素的列表,我想使用 JPA/Hibernate 将其保留在数据库中:
@Entity
class Elements {
void accept(Visitor v) {...}
@? List<Visitable> elements; // or List<AbstractElement>
}
@? class AbstractElement implements Visitable {}
@Entity class Element1 extends AbstractElement {}
@Entity class Element2 extends AbstractElement {}
class ElementDAO {
void saveElements(Elements e, EntityManager em) {
em.persist(e);
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了多种方法。我尝试将 AbstractElement 标记为 @MappedSuperclass,但是 Hibernate 无法找出正确的 Visitable 类型,并且不允许我用 @OneToMany(targetEntity=AbstractElement.class) 标记它。我尝试更改列表以包含 AbstractElement 但 Hibernate 抱怨它无法实例化抽象类。我还尝试在 AbstractElement 类上使用 TABLE_PER_CLASS 继承策略,并得到相同的“无法实例化”错误。
我能做些什么来解决这个问题吗?这到底可行吗?
我在这个网站上搜索了许多有关 jpa 和继承的类似问题,但没有一个建议有效。
更新:所以看来问题不在于继承或抽象类本身的方法,而在于我试图使用 EntityManager::merge() 而不是 EntityManager::persist()。我认为这与合并创建实体的副本有关。
因此,根据这些新知识,我是否只需要承认合并不能用于抽象类的集合?或者有什么方法可以添加 hibernate 可以调用的复制构造函数?
在Guice中,我完全控制了构造模块的时间,并使用了一些模块和我安装的构造函数参数.
然而,在Dagger中,引用其他模块的方法是通过@Module包含注释,并没有给我提供创建要安装的模块的相同方法.
是否有可能从具有构造函数参数的多个模块创建一个理智的ObjectGraph?特别是一个可以使用匕首编译器,而不会遇到循环图的人?
java ×3
dagger ×1
guava ×1
guice ×1
hibernate ×1
jpa-2.0 ×1
performance ×1
persistence ×1
unit-testing ×1