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;