All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.micronaut.aop.Interceptor Maven / Gradle / Ivy

There is a newer version: 4.7.5
Show newest version
/*
 * Copyright 2017-2020 original authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.micronaut.aop;

import io.micronaut.core.annotation.Indexed;
import io.micronaut.core.order.Ordered;
import io.micronaut.core.type.Argument;

/**
 * 

An Interceptor intercepts the execution of a method allowing cross cutting behaviour to be applied to a * method's execution.

* *

All implementations should be thread safe beans

* *

In the case of {@link Around} advice the interceptor should invoke {@link InvocationContext#proceed()} * to proceed with the method invocation

* *

In the case of {@link Introduction} advice the interceptor should invoke {@link InvocationContext#proceed()} * if it is unable to implement the method. The last call to {@link InvocationContext#proceed()} will produce a * {@link UnsupportedOperationException} indicating the method cannot be implemented. This mechanism allows multiple * possible interceptors to participate in method implementation.

* * @param The intercepted type * @param The result type * @author Graeme Rocher * @since 1.0 */ @Indexed(Interceptor.class) public interface Interceptor extends Ordered { @SuppressWarnings("unchecked") Argument> ARGUMENT = (Argument) Argument.of(Interceptor.class); /** * The {@link Around#proxyTarget()} setting. */ CharSequence PROXY_TARGET = "proxyTarget"; /** * The {@link Around#hotswap()} setting. */ CharSequence HOTSWAP = "hotswap"; /** * The {@link Around#lazy()} setting. */ CharSequence LAZY = "lazy"; /** * The {@link Around#cacheableLazyTarget()} setting. */ CharSequence CACHEABLE_LAZY_TARGET = "cacheableLazyTarget"; /** * Intercepts an execution from a declared {@link Around} advice. The implementation can either call {@link InvocationContext#proceed()} to return the original value or provide a replacement value * * @param context The interception context * @return result type */ R intercept(InvocationContext context); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy