想象一下有一个 SessionFactory 的生产者(例如):
@Produces public SessionFactory produceSessionFactory(){}
不,我有第二个生产者,它产生一些其他对象,比如说一个 DatabaseObject,并且需要一个对 SessionFactory 的引用:
@Produces
public DatabaseObject produceDatabaseObject(SessionFactory factory){}
不,我可以像这样使用我的数据库对象:
@Inject
DatabaseObject object;
到目前为止,一切都很好。所以让我们假设这些东西是在一个框架中实现的,并且将被多个应用程序使用。
现在一个应用程序决定要使用另一个 SessionFactory,所以它实现了自己的生产者和限定符:
@Produces
@CustomQualifier
public SessionFactory produceSessionFactory(){}
但是现在,据我所知,我不能将 DatabaseObject 与限定符一起使用,因为 - 当然 - 限定符只是在 SessionFactory 的生产者处使用。所以这行不通:
@Inject
@CustomQualifier
DatabaseObject object;
因此,应用程序将不得不重新实现 DatabaseObject 生产者,具有完全相同的代码,或者扩展基本生产者并仅添加限定符:
@Produces
@CustomQualifier
public DatabaseObject produceDatabaseObject(@CustomQualifier SessionFactory factory){
return super.produceDatabaseObject(factory);
}
从我的角度来看,这会以某种方式产生样板代码,如果你有很多生产者,这会很有趣。
有没有办法在不需要重新实现生产者的情况下实现这一点?所以基本上生产者方法被注入了关于它产生的对象上的限定符的 SessionFactory?
谢谢!