如何在spring中将一个bean注入一组bean?

时间:2014-04-03 22:58:30

标签: java spring hibernate

我的应用程序的dao层需要一个hibernate引用。

所以所有的dao bean都需要它。

我配置每个,如果有一种方法可以在春天为一组bean注入一个bean,我会徘徊吗?喜欢切入点表达。

2 个答案:

答案 0 :(得分:1)

有关问题的Hibernate特定部分,请参阅“Don't repeat the DAO!”。该设计与8年前一样有效。它的要点是不重复你的DAO逻辑。而是创建一个包含重复CRUD和会话管理逻辑的通用DAO父类。它通常需要两个类型参数,一个用于它管理的实体类型,另一个用于实体@Id的类型。

这是文章中的粘贴。这是界面

public interface GenericDao <T, PK extends Serializable> {

    /** Persist the newInstance object into database */
    PK create(T newInstance);

    /** Retrieve an object that was previously persisted to the database using
     *   the indicated id as primary key
     */
    T read(PK id);

    /** Save changes made to a persistent object.  */
    void update(T transientObject);

    /** Remove an object from persistent storage in the database */
    void delete(T persistentObject);
}

这是父类

public class GenericDaoHibernateImpl <T, PK extends Serializable>
    implements GenericDao<T, PK>, FinderExecutor {
    private Class<T> type;

    public GenericDaoHibernateImpl(Class<T> type) {
        this.type = type;
    }

    public PK create(T o) {
        return (PK) getSession().save(o);
    }

    public T read(PK id) {
        return (T) getSession().get(type, id);
    }

    public void update(T o) {
        getSession().update(o);
    }

    public void delete(T o) {
        getSession().delete(o);
    }

    // Not showing implementations of getSession() and setSessionFactory()
            }

或者更好的是,只需使用Spring Data JPA

答案 1 :(得分:1)

为此,您可以将bean(Hibernate引用)的自动装配用于dao层。您可以使用自动装配byName,以便一个名称适用于所有。这是引入自动装配的灵魂目的,这样您就不必在每个bean中反复注入它们。