gpt4 book ai didi

Java CDI : Decorator with multiple generic params

转载 作者:搜寻专家 更新时间:2023-10-30 19:47:22 27 4
gpt4 key购买 nike

我有以下结构:

@Decorator
public abstract class MyDecorator<T extends BaseEntity, Q extends QueryParams> implements EntityService<T, Q> {

@Any
@Inject
@Delegate
EntityService<T, Q> delegate;

@Override
public T save(T entity) { ... }

}

这是 EntityService 接口(interface)声明:

public interface EntityService<T extends BaseEntity, Q extends QueryParams> {

T save(T entity);

void deleteById(Integer id);

void deleteAllById(List<Integer> ids);

void delete(T entity);

void deleteAll(List<T> entities);

T findById(Integer id);

QueryResultWrapper<T> query(Q parameters);

Long count(Q parameters);

}

不幸的是,尽管没有显示任何错误,但装饰器保存方法从未在应该调用的时候被调用......我让它工作的唯一方法是这样的:

@Decorator
public abstract class MyDecorator<T extends BaseEntity> implements EntityService<T> { ... }

没有 Q extends QueryParams 泛型参数。

MyDecoratorbeans.xml 中声明。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="all" version="1.1">

<decorators>
<class>fortuna.backend.comum.decorators.MyDecorator</class>
</decorators>

</beans>

有什么线索吗?

最佳答案

设法解决了这个问题。我的问题是我使用的是 QueryParams直接在大多数端点/服务实现中,例如:

public class PersonService extends EntityService<Person, QueryParams> { ... }

事实上,QueryParams实际上不是extends QueryParams ,就是类(class)本身!这就是为什么 PersonService没有触发 MyDecorator完全没有!

因此我创建了一个名为 IQueryParams 的界面并改用它,就像那样:

public abstract class MyDecorator<T extends BaseEntity, Q extends IQueryParams> implements EntityService<T, Q> {

现在PersonService保存方法确实会触发 MyDecorator .

关于Java CDI : Decorator with multiple generic params,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42030364/

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