Below snippet is taken from here. My question is how can I have this binding in Guice.
<bean id="searchProcessor" class="com.googlecode.genericdao.search.jpa.JPASearchProcessor">
<constructor-arg ref="metadataUtil" />
</bean>
<bean id="metadataUtil" class="com.googlecode.genericdao.search.jpa.hibernate.HibernateMetadataUtil"
factory-method="getInstanceForEntityManagerFactory">
<constructor-arg ref="entityManagerFactory" />
</bean>
I need to @Inject JPASearchProcessor (see below). I am completely new to Guice.
@Inject
public void setSearchProcessor(JPASearchProcessor searchProcessor) {
super.setSearchProcessor(searchProcessor);
}
I was able to resolve this by myself
A provider class HibernateMetadataUtilProvider is create to provide HibernateMetadataUtil
package core.models.dao; import javax.persistence.EntityManagerFactory; import org.hibernate.ejb.HibernateEntityManagerFactory; import com.google.inject.Inject; import com.google.inject.Provider; import com.googlecode.genericdao.search.MetadataUtil; import com.googlecode.genericdao.search.jpa.hibernate.HibernateMetadataUtil; @SuppressWarnings("deprecation") public class HibernateMetadataUtilProvider implements Provider<MetadataUtil> { @Inject private EntityManagerFactory emf; @Override public MetadataUtil get() { return HibernateMetadataUtil.getInstanceForEntityManagerFactory((HibernateEntityManagerFactory) emf); } }
Another class JPASearchProcessorProvider is created which will inject JPASearchProcessor
package core.models.dao; import com.google.inject.Inject; import com.google.inject.Provider; import com.googlecode.genericdao.search.MetadataUtil; import com.googlecode.genericdao.search.jpa.JPASearchProcessor; public class JPASearchProcessorProvider implements Provider<JPASearchProcessor> { @Inject private MetadataUtil mdu; @Override public JPASearchProcessor get() { return new JPASearchProcessor(mdu); } }
Then in our inject class we can simply bind these providers
public class AppInjector extends AbstractModule { @Override protected void configure() { /* * JPA Bindings */ bind(JPASearchProcessor.class).toProvider(JPASearchProcessorProvider.class); bind(MetadataUtil.class).toProvider(HibernateMetadataUtilProvider.class); }