gpt4 book ai didi

java - 如何使用泛型在抽象类中注入(inject)服务

转载 作者:行者123 更新时间:2023-12-01 05:45:36 26 4
gpt4 key购买 nike

我正在尝试创建一个通用抽象服务类,通过将服务层对象(DTO?)、数据层实体及其相应的 DAO 组合在一起,为我的服务层提供常见的 CRUD 操作。

DAO 层是标准问题抽象,我的 DAO 扩展了 AbstractJpaImpl:

@Repository
public abstract class AbstractJpaBaseDaoImpl<K extends Serializable, E> implements BaseDao<K, E> {
//Dao implementation
}

DAO 扩展了此类并实现了各自扩展 BaseDao 的 dao 接口(interface)。

我希望在我的服务层中创建类似的东西,但是我如何注入(inject) dao 本身?

public abstract class AbstractBaseCrudServiceImpl<K extends Serializable, B extends AbstractBaseCrudBean, P, D extends AbstractJpaBaseDaoImpl<K,P>>
implements BaseCrudService<K, B> {

protected Class<B> businessObject;
protected Class<P> persistObject;
protected Class<D> dao;

@SuppressWarnings("unchecked")
public AbstractBaseCrudServiceImpl() {
//Extract the class type by accessing this classes parameters by index <0,1...> so 0 is K and 1 is E.
this.businessObject = (Class<B>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[1];
this.persistObject = (Class<P>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[2];
this.dao = (Class<D>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[3];
}

//stuff ...
@Transactional
@SuppressWarnings("unchecked")
@Override
public void remove(B businessObject) {
logger.debug("Remove " + getBusinessObjectCanonicalName() + " id= " + businessObject.getId());
try {
getDao().remove(businessObject.getId()); //DOES NOT RECOGNIZE REMOVE METHOD
} catch (Exception e) {
logger.error("Unable to delete " + getBusinessObjectCanonicalName() + " record id=" + businessObject.getId(), e);
}
}
//stuff ...
}

使用泛型在这个抽象中注入(inject)服务的最简洁的方法是什么?

D 扩展了 AbstractJpaBaseDaoImpl 并没有剪切它。有我可以遵循的模式吗?

最佳答案

您可以尝试使用@PostConstruct注释方法将基本抽象类中的变量与真实实例化的bean连接起来。这些抽象类可以包含基本的 CRUd 操作实现。下面提供了示例代码。我希望我能以某种方式帮助您的查询。

@PostConstruct public void setupService() {
baseDao = userDao;
}

关于java - 如何使用泛型在抽象类中注入(inject)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6005372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com