Я только что обновился до Micronaut 4 и Java 21, и я пытаюсь поделиться состоянием между httpserverfilter и контроллером, использующим бобы @requestscope. Моя цель состоит в том, чтобы установить некоторую сводную информацию (например, код успеха/сбоя) в контроллере, а затем прочитать фильтр, который информация после того, как контроллер выполняет, чтобы написать окончательное резюме журнала. После некоторой отладки, похоже, мне вводили два разных экземпляра моего бока @RequestScope для того же HTTP -запроса, который я не ожидал. Почему мой фильтр и контроллер получают разные экземпляры, и как я могу его исправить? Компания @RequestScope и его интерфейс < /h3>
У меня есть боб запроса, который содержит специфичные для запроса данные. Он реализует общий интерфейс SummaryInfo. < /P>
// The common interface
public interface SummaryInfo {
SummaryEnum getSummaryEnum();
void setSummaryEnum(SummaryEnum summaryEnum);
Map getIdentifiers();
}
// The Request-Scoped implementation
import io.micronaut.runtime.http.scope.RequestScope;
import lombok.Data;
@Data
@RequestScope
public class RequestInfo implements SummaryInfo {
private SummaryEnum summaryEnum;
private String customerId;
@Override
public Map getIdentifiers() {
return Collections.singletonMap("customerId", customerId);
}
}
< /code>
2. Фильтр журнала < /h3>
Мой фильтр - это синглтон, который непосредственно вводит SummaryInfo Bean. < /P>
import io.micronaut.http.filter.HttpServerFilter;
import io.micronaut.http.filter.ServerFilterChain;
import jakarta.inject.Inject;
import reactor.core.publisher.Mono;
@Filter("/**")
public class SummaryLoggingFilter implements HttpServerFilter {
@Inject
private SummaryInfo summaryInfo; // Direct injection
// ... other dependencies
@Override
public Publisher
Подробнее здесь: https://stackoverflow.com/questions/797 ... vs-control