【发布时间】:2017-06-21 04:27:44
【问题描述】:
我有以下结构:
@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 接口声明:
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 通用参数。
MyDecorator 在 beans.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>
有什么线索吗?
【问题讨论】:
-
您可能需要提供更多信息。我试着用上面的方法做一个快速的 sn-p,它对我很有效(使用 Weld,我认为你也使用)。同样在您的问题中,您提到了
EntityService,但您显示了带有CrudService的代码sn-p。这是一个错字还是介于两者之间的另一个泛型类? -
一个错字,抱歉,刚刚修正。无论如何,我可以提供什么样的额外信息?
-
你能提供你的 beans.xml 文件吗?
-
@hya 抱歉拖了这么久,我刚刚添加了
-
你能分享任何实现 QueryParams 的类吗?
标签: java generics cdi decorator