我们在应用程序中使用 CDI(JSR 299) (JSF2/Seam3.0/Hibernate 3.5.6/GlassFish 3.1.1)
虽然我们无法使用 @Inject 在托管 bean 中注入资源(Helper POJO),但我们也无法在 Hibernate 实体类中执行相同的操作。
我们有一个所有实体对象派生自的基实体类(@MappedSuperclass)。 CDI 注入在两个类别中均失败。
@MappedSuperclass
public class BaseBusinessObject implements Serializable
{
@Inject
private TestClass testClass; //FAILS
}
@Entity
@NamedQueries({ @NamedQuery(name = "Account.findAll", query = "SELECT b FROM Account b") })
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Account extends BaseBusinessObject
{
@Inject
private TestClass testClass; //FAILS
}
看起来这可能是 CDI 的限制。任何人都可以确认 CDI 是否适用于 Hibernate 实体。
任何意见将不胜感激。
感谢和问候
我不太了解 CDI,但我真的不认为这是可能的。
如果我们可以的话,在很多情况下,它可能会导致非常糟糕的设计。
您是否希望 CDI 为整个应用程序创建单个休眠实体,并在其中注入您的帮助程序/服务/其他内容?
或者您是否希望 CDI 在您使用“new Entity()”创建的任何实体中注入内容?
Edit:一般来说,日期时间 utils 不保存任何状态,也不需要任何 CDI 注入的东西,那么为什么不像我们在 apache commons DateUtils 中找到的那样将所有方法设为静态呢?
如果您的日期时间实用程序需要一个状态,请将其设为单例(但要注意并发问题)。
如果您的日期时间实用程序需要调用其他 CDI bean(因此它不能是静态的),那么您宁愿将其设为单例,并在单例上注入其他 CDI bean。
但这是个坏主意。这可能会导致业务层管理回调业务层的实体或类似的东西,并存在一些循环依赖问题以及实体和业务层之间的紧密耦合。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)