实体 bean 的 Guice 依赖注入?
对于丰富的域驱动设计,我想在 JPA/Hibernate 实体 bean 上使用 Guice 依赖注入。我正在寻找与非 Spring bean 的 Spring @configurable 注释类似的解决方案。
有人知道图书馆吗?有代码示例吗?
For a rich domain driven design I want to use Guice dependency injection on JPA/Hibernate entity beans. I am looking for a similar solution as the Spring @configurable annotation for non-Spring beans.
Does anybody know of a library? Any code examples?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用 AspectJ 来完成此操作。
创建 @Configurable 注释:
创建一个与此类似的 AspectJ @Aspect:
为您的注入器创建(并使用)一个持有类:
配置 META-INF/aop.xml:
使用方面jweaver 启动您的 VM:
注释您的域类:
You can do this with AspectJ.
Create the @Configurable annotation:
Create an AspectJ @Aspect similar to this:
Create (and use) a holding class for your injector:
Configure META-INF/aop.xml:
Start your VM with aspectjweaver:
Annotate your domain classes:
我为这个问题找到了一个有点肮脏的解决方法。
假设只有两种方法来创建
T
类型的实体对象:javax.inject.Provider
获取一个@PostLoad
带注释的方法)。进一步假设您有所有实体的基础结构基类,您只需向该实体添加一个实体侦听器即可。在这个例子中,我使用静态注入——也许有更好的方法。
在您的模块设置中,您只需要调用 requestStaticInjection(PersistentDomainObject.class);
现在您只需创建实体类,例如
坏事,您必须相信没有人会创建 MyDomainEntity 自己处理,但会向
Provider
请求。这可以通过隐藏构造函数来提供。亲切的问候,
阿维
I found a bit dirty workaround for this problem.
Assuming there are only two ways to create an entity object of type
T
:javax.inject.Provider<T>
@PostLoad
annotated methods).Further assuming you have a infrastructural baseclass for all of your entities, you can just add an entity listener to this entity. In this example I use static injection - maybe there is a nicer way.
In your module setup you just need to call
requestStaticInjection(PersistentDomainObject.class);
Now you simply can create entity classes like
Bad thing about it, you have to trust in that noone will create a
MyDomainEntity
on his own but will ask aProvider<MyDomainEntity>
for it. This could be provided by hiding the constructor.Kind regards,
avi
由于实体是由 JPA 提供者创建的,因此我看不到 Guice 何时发挥作用。也许可以看看 Salve 项目的方法。
Since entities are created by the JPA provider, I fail to see when Guice will come in play. Maybe have a look at the approach of the Salve project though.