diff --git a/aop/src/main/java/io/micronaut/aop/Around.java b/aop/src/main/java/io/micronaut/aop/Around.java index 179105f82c7..f8d98c27d32 100644 --- a/aop/src/main/java/io/micronaut/aop/Around.java +++ b/aop/src/main/java/io/micronaut/aop/Around.java @@ -38,7 +38,7 @@ * } * * - *

Note that the annotation MUST be {@link java.lang.annotation.RetentionPolicy#RUNTIME} and if the specified {@link io.micronaut.context.annotation.Type} is present, it must implement {@link MethodInterceptor}

+ *

Note that the annotation MUST be {@link java.lang.annotation.RetentionPolicy#RUNTIME} and the specified {@link io.micronaut.context.annotation.Type} must implement {@link MethodInterceptor}

* * @author Graeme Rocher * @since 1.0 diff --git a/context/src/main/java/io/micronaut/runtime/context/env/ConfigurationAdvice.java b/context/src/main/java/io/micronaut/runtime/context/env/ConfigurationAdvice.java index b411d0f291f..af5b09e6312 100644 --- a/context/src/main/java/io/micronaut/runtime/context/env/ConfigurationAdvice.java +++ b/context/src/main/java/io/micronaut/runtime/context/env/ConfigurationAdvice.java @@ -16,6 +16,7 @@ package io.micronaut.runtime.context.env; import io.micronaut.aop.Introduction; +import io.micronaut.context.annotation.Type; import io.micronaut.core.annotation.Internal; import java.lang.annotation.Retention; @@ -30,6 +31,7 @@ */ @Retention(RetentionPolicy.RUNTIME) @Introduction +@Type(ConfigurationIntroductionAdvice.class) @Internal public @interface ConfigurationAdvice { /** diff --git a/context/src/main/java/io/micronaut/runtime/context/env/ConfigurationIntroductionAdvice.java b/context/src/main/java/io/micronaut/runtime/context/env/ConfigurationIntroductionAdvice.java index 80069689df5..932ba95c6b1 100644 --- a/context/src/main/java/io/micronaut/runtime/context/env/ConfigurationIntroductionAdvice.java +++ b/context/src/main/java/io/micronaut/runtime/context/env/ConfigurationIntroductionAdvice.java @@ -15,7 +15,6 @@ */ package io.micronaut.runtime.context.env; -import io.micronaut.aop.InterceptorBean; import io.micronaut.aop.MethodInterceptor; import io.micronaut.aop.MethodInvocationContext; import io.micronaut.context.BeanContext; @@ -41,7 +40,6 @@ * @since 1.3.0 */ @Prototype -@InterceptorBean(ConfigurationAdvice.class) @Internal public class ConfigurationIntroductionAdvice implements MethodInterceptor { private static final String MEMBER_BEAN = "bean"; diff --git a/context/src/main/java/io/micronaut/runtime/context/scope/Refreshable.java b/context/src/main/java/io/micronaut/runtime/context/scope/Refreshable.java index d686ff6a51c..8a5e567e212 100644 --- a/context/src/main/java/io/micronaut/runtime/context/scope/Refreshable.java +++ b/context/src/main/java/io/micronaut/runtime/context/scope/Refreshable.java @@ -18,6 +18,9 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; import io.micronaut.context.annotation.Bean; +import io.micronaut.context.annotation.Type; +import io.micronaut.runtime.context.scope.refresh.RefreshInterceptor; + import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -33,6 +36,7 @@ @Documented @Retention(RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) +@Type(RefreshInterceptor.class) @Bean public @interface Refreshable { diff --git a/context/src/main/java/io/micronaut/runtime/context/scope/refresh/RefreshInterceptor.java b/context/src/main/java/io/micronaut/runtime/context/scope/refresh/RefreshInterceptor.java index ea0eb7b8a11..84dfeefa71e 100644 --- a/context/src/main/java/io/micronaut/runtime/context/scope/refresh/RefreshInterceptor.java +++ b/context/src/main/java/io/micronaut/runtime/context/scope/refresh/RefreshInterceptor.java @@ -15,13 +15,11 @@ */ package io.micronaut.runtime.context.scope.refresh; -import io.micronaut.aop.InterceptorBean; import io.micronaut.aop.MethodInterceptor; import io.micronaut.aop.MethodInvocationContext; import io.micronaut.context.annotation.Requires; import io.micronaut.context.env.Environment; -import io.micronaut.runtime.context.scope.Refreshable; - +import javax.inject.Singleton; import java.util.concurrent.locks.Lock; /** @@ -31,7 +29,7 @@ * @author Graeme Rocher * @since 1.0 */ -@InterceptorBean(Refreshable.class) +@Singleton @Requires(notEnv = {Environment.FUNCTION, Environment.ANDROID}) public class RefreshInterceptor implements MethodInterceptor { diff --git a/context/src/main/java/io/micronaut/scheduling/annotation/Async.java b/context/src/main/java/io/micronaut/scheduling/annotation/Async.java index 6a5a57e2c9f..d88365fe4aa 100644 --- a/context/src/main/java/io/micronaut/scheduling/annotation/Async.java +++ b/context/src/main/java/io/micronaut/scheduling/annotation/Async.java @@ -17,7 +17,9 @@ import io.micronaut.aop.Around; import io.micronaut.context.annotation.Executable; +import io.micronaut.context.annotation.Type; import io.micronaut.scheduling.TaskExecutors; +import io.micronaut.scheduling.async.AsyncInterceptor; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; @@ -42,6 +44,7 @@ @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Executable @Around +@Type(AsyncInterceptor.class) public @interface Async { /** * The name of the executor service to execute the task on. Defaults to {@link TaskExecutors#SCHEDULED} diff --git a/context/src/main/java/io/micronaut/scheduling/async/AsyncInterceptor.java b/context/src/main/java/io/micronaut/scheduling/async/AsyncInterceptor.java index d65c77078d9..3b787cc16bc 100644 --- a/context/src/main/java/io/micronaut/scheduling/async/AsyncInterceptor.java +++ b/context/src/main/java/io/micronaut/scheduling/async/AsyncInterceptor.java @@ -15,7 +15,10 @@ */ package io.micronaut.scheduling.async; -import io.micronaut.aop.*; +import io.micronaut.aop.InterceptPhase; +import io.micronaut.aop.InterceptedMethod; +import io.micronaut.aop.MethodInterceptor; +import io.micronaut.aop.MethodInvocationContext; import io.micronaut.context.BeanLocator; import io.micronaut.context.BeanProvider; import io.micronaut.core.annotation.Internal; @@ -28,6 +31,7 @@ import org.slf4j.LoggerFactory; import javax.inject.Named; +import javax.inject.Singleton; import java.util.Map; import java.util.Optional; import java.util.concurrent.CompletableFuture; @@ -41,7 +45,7 @@ * @author graemerocher * @since 1.0 */ -@InterceptorBean(Async.class) +@Singleton @Internal public class AsyncInterceptor implements MethodInterceptor { diff --git a/function-client/src/main/java/io/micronaut/function/client/FunctionClient.java b/function-client/src/main/java/io/micronaut/function/client/FunctionClient.java index 5b831b52724..9db88b56e00 100644 --- a/function-client/src/main/java/io/micronaut/function/client/FunctionClient.java +++ b/function-client/src/main/java/io/micronaut/function/client/FunctionClient.java @@ -18,6 +18,8 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; import io.micronaut.aop.Introduction; +import io.micronaut.context.annotation.Type; +import io.micronaut.function.client.aop.FunctionClientAdvice; import io.micronaut.retry.annotation.Recoverable; import javax.inject.Singleton; @@ -36,5 +38,6 @@ @Singleton @Introduction @Recoverable +@Type(FunctionClientAdvice.class) public @interface FunctionClient { } diff --git a/function-client/src/main/java/io/micronaut/function/client/aop/FunctionClientAdvice.java b/function-client/src/main/java/io/micronaut/function/client/aop/FunctionClientAdvice.java index ca8a3b89da5..8b5ca088555 100644 --- a/function-client/src/main/java/io/micronaut/function/client/aop/FunctionClientAdvice.java +++ b/function-client/src/main/java/io/micronaut/function/client/aop/FunctionClientAdvice.java @@ -16,12 +16,14 @@ package io.micronaut.function.client.aop; import io.micronaut.aop.InterceptedMethod; -import io.micronaut.aop.InterceptorBean; import io.micronaut.aop.MethodInterceptor; import io.micronaut.aop.MethodInvocationContext; import io.micronaut.core.naming.NameUtils; import io.micronaut.core.type.Argument; -import io.micronaut.function.client.*; +import io.micronaut.function.client.FunctionDefinition; +import io.micronaut.function.client.FunctionDiscoveryClient; +import io.micronaut.function.client.FunctionInvoker; +import io.micronaut.function.client.FunctionInvokerChooser; import io.micronaut.function.client.exceptions.FunctionNotFoundException; import io.reactivex.Flowable; import io.reactivex.Maybe; @@ -37,7 +39,7 @@ * @author graemerocher * @since 1.0 */ -@InterceptorBean(FunctionClient.class) +@Singleton public class FunctionClientAdvice implements MethodInterceptor { private final FunctionDiscoveryClient discoveryClient; diff --git a/http-client-core/src/main/java/io/micronaut/http/client/annotation/Client.java b/http-client-core/src/main/java/io/micronaut/http/client/annotation/Client.java index 7e0318e2b89..a2ae97e3a5a 100644 --- a/http-client-core/src/main/java/io/micronaut/http/client/annotation/Client.java +++ b/http-client-core/src/main/java/io/micronaut/http/client/annotation/Client.java @@ -19,8 +19,10 @@ import io.micronaut.aop.Introduction; import io.micronaut.context.annotation.AliasFor; +import io.micronaut.context.annotation.Type; import io.micronaut.http.HttpVersion; import io.micronaut.http.client.HttpClientConfiguration; +import io.micronaut.http.client.interceptor.HttpClientIntroductionAdvice; import io.micronaut.http.hateoas.JsonError; import io.micronaut.retry.annotation.Recoverable; @@ -37,6 +39,7 @@ @Documented @Retention(RUNTIME) @Introduction +@Type(HttpClientIntroductionAdvice.class) @Recoverable @Singleton // tag::value[] diff --git a/http-client-core/src/main/java/io/micronaut/http/client/interceptor/HttpClientIntroductionAdvice.java b/http-client-core/src/main/java/io/micronaut/http/client/interceptor/HttpClientIntroductionAdvice.java index dc01bde11e1..6c59ca36358 100644 --- a/http-client-core/src/main/java/io/micronaut/http/client/interceptor/HttpClientIntroductionAdvice.java +++ b/http-client-core/src/main/java/io/micronaut/http/client/interceptor/HttpClientIntroductionAdvice.java @@ -16,7 +16,6 @@ package io.micronaut.http.client.interceptor; import io.micronaut.aop.InterceptedMethod; -import io.micronaut.aop.InterceptorBean; import io.micronaut.aop.MethodInterceptor; import io.micronaut.aop.MethodInvocationContext; import io.micronaut.context.BeanContext; @@ -76,7 +75,7 @@ * @author graemerocher * @since 1.0 */ -@InterceptorBean(Client.class) +@Singleton @Internal @BootstrapContextCompatible public class HttpClientIntroductionAdvice implements MethodInterceptor { diff --git a/runtime/src/main/java/io/micronaut/retry/annotation/Recoverable.java b/runtime/src/main/java/io/micronaut/retry/annotation/Recoverable.java index 4070afea468..1ad4dbea6de 100644 --- a/runtime/src/main/java/io/micronaut/retry/annotation/Recoverable.java +++ b/runtime/src/main/java/io/micronaut/retry/annotation/Recoverable.java @@ -18,6 +18,9 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; import io.micronaut.aop.Around; +import io.micronaut.context.annotation.Type; +import io.micronaut.retry.intercept.RecoveryInterceptor; + import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -36,6 +39,7 @@ @Retention(RUNTIME) @Target({ElementType.METHOD, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Around +@Type(RecoveryInterceptor.class) public @interface Recoverable { /** * Used to specify the API to lookup fallbacks for. This is useful in cases diff --git a/runtime/src/main/java/io/micronaut/retry/annotation/Retryable.java b/runtime/src/main/java/io/micronaut/retry/annotation/Retryable.java index 71b6bebce6e..cde652fc681 100644 --- a/runtime/src/main/java/io/micronaut/retry/annotation/Retryable.java +++ b/runtime/src/main/java/io/micronaut/retry/annotation/Retryable.java @@ -19,6 +19,9 @@ import io.micronaut.aop.Around; import io.micronaut.context.annotation.AliasFor; +import io.micronaut.context.annotation.Type; +import io.micronaut.retry.intercept.DefaultRetryInterceptor; + import javax.validation.constraints.Digits; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; @@ -35,6 +38,7 @@ @Retention(RUNTIME) @Target({ElementType.METHOD, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Around +@Type(DefaultRetryInterceptor.class) public @interface Retryable { int MAX_INTEGRAL_DIGITS = 4; diff --git a/runtime/src/main/java/io/micronaut/retry/intercept/DefaultRetryInterceptor.java b/runtime/src/main/java/io/micronaut/retry/intercept/DefaultRetryInterceptor.java index 63e2dca8462..b2c628293c6 100644 --- a/runtime/src/main/java/io/micronaut/retry/intercept/DefaultRetryInterceptor.java +++ b/runtime/src/main/java/io/micronaut/retry/intercept/DefaultRetryInterceptor.java @@ -15,7 +15,10 @@ */ package io.micronaut.retry.intercept; -import io.micronaut.aop.*; +import io.micronaut.aop.InterceptPhase; +import io.micronaut.aop.InterceptedMethod; +import io.micronaut.aop.MethodInterceptor; +import io.micronaut.aop.MethodInvocationContext; import io.micronaut.context.event.ApplicationEventPublisher; import io.micronaut.core.annotation.AnnotationValue; import io.micronaut.core.convert.value.MutableConvertibleValues; @@ -32,6 +35,7 @@ import org.slf4j.LoggerFactory; import javax.inject.Named; +import javax.inject.Singleton; import java.time.Duration; import java.util.Map; import java.util.Optional; @@ -51,7 +55,7 @@ * @author graemerocher * @since 1.0 */ -@InterceptorBean(Retryable.class) +@Singleton public class DefaultRetryInterceptor implements MethodInterceptor { private static final Logger LOG = LoggerFactory.getLogger(DefaultRetryInterceptor.class); diff --git a/runtime/src/main/java/io/micronaut/retry/intercept/RecoveryInterceptor.java b/runtime/src/main/java/io/micronaut/retry/intercept/RecoveryInterceptor.java index 366f392f298..89aa62aef66 100644 --- a/runtime/src/main/java/io/micronaut/retry/intercept/RecoveryInterceptor.java +++ b/runtime/src/main/java/io/micronaut/retry/intercept/RecoveryInterceptor.java @@ -15,7 +15,10 @@ */ package io.micronaut.retry.intercept; -import io.micronaut.aop.*; +import io.micronaut.aop.InterceptPhase; +import io.micronaut.aop.InterceptedMethod; +import io.micronaut.aop.MethodInterceptor; +import io.micronaut.aop.MethodInvocationContext; import io.micronaut.context.BeanContext; import io.micronaut.core.convert.ConversionService; import io.micronaut.discovery.exceptions.NoAvailableServiceException; @@ -31,6 +34,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.inject.Singleton; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; @@ -42,7 +46,7 @@ * @author graemerocher * @since 1.0 */ -@InterceptorBean(Recoverable.class) +@Singleton public class RecoveryInterceptor implements MethodInterceptor { /** diff --git a/tracing/src/main/java/io/micronaut/tracing/annotation/ContinueSpan.java b/tracing/src/main/java/io/micronaut/tracing/annotation/ContinueSpan.java index c73450151a7..df7d3140712 100644 --- a/tracing/src/main/java/io/micronaut/tracing/annotation/ContinueSpan.java +++ b/tracing/src/main/java/io/micronaut/tracing/annotation/ContinueSpan.java @@ -16,6 +16,9 @@ package io.micronaut.tracing.annotation; import io.micronaut.aop.Around; +import io.micronaut.context.annotation.Type; +import io.micronaut.tracing.interceptor.TraceInterceptor; + import java.lang.annotation.*; /** @@ -31,5 +34,6 @@ @Inherited @Target(value = { ElementType.METHOD }) @Around +@Type(TraceInterceptor.class) public @interface ContinueSpan { } diff --git a/tracing/src/main/java/io/micronaut/tracing/annotation/NewSpan.java b/tracing/src/main/java/io/micronaut/tracing/annotation/NewSpan.java index 537dd4ba437..55a17a1f704 100644 --- a/tracing/src/main/java/io/micronaut/tracing/annotation/NewSpan.java +++ b/tracing/src/main/java/io/micronaut/tracing/annotation/NewSpan.java @@ -16,6 +16,9 @@ package io.micronaut.tracing.annotation; import io.micronaut.aop.Around; +import io.micronaut.context.annotation.Type; +import io.micronaut.tracing.interceptor.TraceInterceptor; + import java.lang.annotation.*; /** @@ -30,6 +33,7 @@ @Inherited @Target(value = { ElementType.METHOD }) @Around +@Type(TraceInterceptor.class) public @interface NewSpan { /** diff --git a/tracing/src/main/java/io/micronaut/tracing/interceptor/TraceInterceptor.java b/tracing/src/main/java/io/micronaut/tracing/interceptor/TraceInterceptor.java index 178257e3953..8dfb8f85c8f 100644 --- a/tracing/src/main/java/io/micronaut/tracing/interceptor/TraceInterceptor.java +++ b/tracing/src/main/java/io/micronaut/tracing/interceptor/TraceInterceptor.java @@ -15,7 +15,10 @@ */ package io.micronaut.tracing.interceptor; -import io.micronaut.aop.*; +import io.micronaut.aop.InterceptPhase; +import io.micronaut.aop.InterceptedMethod; +import io.micronaut.aop.MethodInterceptor; +import io.micronaut.aop.MethodInvocationContext; import io.micronaut.context.annotation.Requires; import io.micronaut.core.annotation.AnnotationMetadata; import io.micronaut.core.annotation.AnnotationValue; @@ -48,7 +51,6 @@ */ @Singleton @Requires(beans = Tracer.class) -@InterceptorBean({ContinueSpan.class, NewSpan.class}) public class TraceInterceptor implements MethodInterceptor { public static final String CLASS_TAG = "class"; public static final String METHOD_TAG = "method"; diff --git a/validation/src/main/java/io/micronaut/validation/Validated.java b/validation/src/main/java/io/micronaut/validation/Validated.java index c38202b6bcf..45b88787e19 100644 --- a/validation/src/main/java/io/micronaut/validation/Validated.java +++ b/validation/src/main/java/io/micronaut/validation/Validated.java @@ -18,6 +18,8 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; import io.micronaut.aop.Around; +import io.micronaut.context.annotation.Type; + import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -33,5 +35,6 @@ @Retention(RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) @Around +@Type(ValidatingInterceptor.class) public @interface Validated { } diff --git a/validation/src/main/java/io/micronaut/validation/ValidatingInterceptor.java b/validation/src/main/java/io/micronaut/validation/ValidatingInterceptor.java index 42a594de009..e40a9b5c487 100644 --- a/validation/src/main/java/io/micronaut/validation/ValidatingInterceptor.java +++ b/validation/src/main/java/io/micronaut/validation/ValidatingInterceptor.java @@ -15,8 +15,11 @@ */ package io.micronaut.validation; -import io.micronaut.aop.*; import io.micronaut.core.annotation.Nullable; +import io.micronaut.aop.InterceptPhase; +import io.micronaut.aop.InterceptedMethod; +import io.micronaut.aop.MethodInterceptor; +import io.micronaut.aop.MethodInvocationContext; import io.micronaut.inject.ExecutableMethod; import io.micronaut.validation.validator.ExecutableMethodValidator; import io.micronaut.validation.validator.ReactiveValidator; @@ -36,7 +39,7 @@ * @author Graeme Rocher * @since 1.0 */ -@InterceptorBean(Validated.class) +@Singleton public class ValidatingInterceptor implements MethodInterceptor { /** diff --git a/websocket/src/main/java/io/micronaut/websocket/annotation/ClientWebSocket.java b/websocket/src/main/java/io/micronaut/websocket/annotation/ClientWebSocket.java index a677647cae6..c7e80144538 100644 --- a/websocket/src/main/java/io/micronaut/websocket/annotation/ClientWebSocket.java +++ b/websocket/src/main/java/io/micronaut/websocket/annotation/ClientWebSocket.java @@ -18,6 +18,7 @@ import io.micronaut.aop.Introduction; import io.micronaut.context.annotation.*; import io.micronaut.websocket.WebSocketVersion; +import io.micronaut.websocket.interceptor.ClientWebSocketInterceptor; import io.micronaut.websocket.interceptor.WebSocketSessionAware; import java.lang.annotation.Documented; @@ -39,6 +40,7 @@ @Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @WebSocketComponent @Introduction(interfaces = WebSocketSessionAware.class) +@Type(ClientWebSocketInterceptor.class) @DefaultScope(Prototype.class) public @interface ClientWebSocket { diff --git a/websocket/src/main/java/io/micronaut/websocket/interceptor/ClientWebSocketInterceptor.java b/websocket/src/main/java/io/micronaut/websocket/interceptor/ClientWebSocketInterceptor.java index 5b1936d8108..41610c6e290 100644 --- a/websocket/src/main/java/io/micronaut/websocket/interceptor/ClientWebSocketInterceptor.java +++ b/websocket/src/main/java/io/micronaut/websocket/interceptor/ClientWebSocketInterceptor.java @@ -16,7 +16,6 @@ package io.micronaut.websocket.interceptor; import io.micronaut.aop.InterceptedMethod; -import io.micronaut.aop.InterceptorBean; import io.micronaut.aop.MethodInterceptor; import io.micronaut.aop.MethodInvocationContext; import io.micronaut.context.annotation.Prototype; @@ -24,7 +23,6 @@ import io.micronaut.http.MediaType; import io.micronaut.http.annotation.Produces; import io.micronaut.websocket.WebSocketSession; -import io.micronaut.websocket.annotation.ClientWebSocket; import io.micronaut.websocket.exceptions.WebSocketClientException; import java.io.Closeable; @@ -36,7 +34,6 @@ * @since 1.0 */ @Prototype -@InterceptorBean(ClientWebSocket.class) public class ClientWebSocketInterceptor implements MethodInterceptor { private WebSocketSession webSocketSession;