此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring AMQP 3.2.6! |
代理@RabbitListener
和泛型
如果您的服务旨在代理(例如,在@Transactional
),您应该记住一些注意事项
该接口具有通用参数。
请考虑以下示例:
interface TxService<P> {
String handle(P payload, String header);
}
static class TxServiceImpl implements TxService<Foo> {
@Override
@RabbitListener(...)
public String handle(Thing thing, String rk) {
...
}
}
使用通用接口和特定实现时,您被迫切换到 CGLIB 目标类代理,因为该接口的实际实现handle
方法是一种桥接方法。
在事务管理的情况下,CGLIB 的使用是通过使用
注释选项:@EnableTransactionManagement(proxyTargetClass = true)
.
在这种情况下,必须在实现中的目标方法上声明所有注释,如以下示例所示:
static class TxServiceImpl implements TxService<Foo> {
@Override
@Transactional
@RabbitListener(...)
public String handle(@Payload Foo foo, @Header("amqp_receivedRoutingKey") String rk) {
...
}
}