繁体   English   中英

春豆到谷歌guice转换

[英]Spring bean to google guice conversion

下面的摘录摘自这里 我的问题是我如何在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>

我需要@Inject JPASearchProcessor(请参见下文)。 我对Guice完全陌生。

@Inject
public void setSearchProcessor(JPASearchProcessor searchProcessor) {
        super.setSearchProcessor(searchProcessor);
}

我自己解决了

创建提供程序类HibernateMetadataUtilProvider以提供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);
        }
     }

创建了另一个类JPASearchProcessorProvider,它将注入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);
        }

    }

然后在我们的注入类中,我们可以简单地绑定这些提供程序

    public class AppInjector extends AbstractModule {


        @Override
        protected void configure() {


            /*
             * JPA Bindings
             */
            bind(JPASearchProcessor.class).toProvider(JPASearchProcessorProvider.class);
            bind(MetadataUtil.class).toProvider(HibernateMetadataUtilProvider.class);


    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM