I имеет следующую структуру:Java CDI: декоратор с несколькими родового Params
@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>
Любые подсказки?
Возможно, вам потребуется предоставить дополнительную информацию. Я попытался сделать быстрый фрагмент с приведенным выше, и это просто сработало для меня (используя Weld, который, как я полагаю, вы также используете). Также в вашем вопросе вы говорите о «EntityService», но покажете фрагмент кода с «CrudService». Это опечатка или есть другой общий класс между ними? – Siliarus
Опечатка, извините, только исправлена. В любом случае, какую дополнительную информацию я могу предоставить? –
Не могли бы вы предоставить свой файл beans.xml? – hya