/*
* Copyright 2002-2016 the original author or 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 org.aopalliance.intercept;
import javax.annotation.Nonnull;
Intercepts the construction of a new object.
The user should implement the construct(ConstructorInvocation)
method to modify the original behavior. E.g. the following class implements a singleton interceptor (allows only one unique instance for the intercepted class):
class DebuggingInterceptor implements ConstructorInterceptor {
Object instance=null;
Object construct(ConstructorInvocation i) throws Throwable {
if(instance==null) {
return instance=i.proceed();
} else {
throw new Exception("singleton does not allow multiple instance");
}
}
}
Author: Rod Johnson
/**
* Intercepts the construction of a new object.
*
* <p>The user should implement the {@link
* #construct(ConstructorInvocation)} method to modify the original
* behavior. E.g. the following class implements a singleton
* interceptor (allows only one unique instance for the intercepted
* class):
*
* <pre class=code>
* class DebuggingInterceptor implements ConstructorInterceptor {
* Object instance=null;
*
* Object construct(ConstructorInvocation i) throws Throwable {
* if(instance==null) {
* return instance=i.proceed();
* } else {
* throw new Exception("singleton does not allow multiple instance");
* }
* }
* }
* </pre>
*
* @author Rod Johnson
*/
public interface ConstructorInterceptor extends Interceptor {
Implement this method to perform extra treatments before and after the construction of a new object. Polite implementations would certainly like to invoke Joinpoint.proceed()
. Params: - invocation – the construction joinpoint
Throws: - Throwable – if the interceptors or the target object
throws an exception
Returns: the newly created object, which is also the result of the call to Joinpoint.proceed()
; might be replaced by the interceptor
/**
* Implement this method to perform extra treatments before and
* after the construction of a new object. Polite implementations
* would certainly like to invoke {@link Joinpoint#proceed()}.
* @param invocation the construction joinpoint
* @return the newly created object, which is also the result of
* the call to {@link Joinpoint#proceed()}; might be replaced by
* the interceptor
* @throws Throwable if the interceptors or the target object
* throws an exception
*/
@Nonnull
Object construct(ConstructorInvocation invocation) throws Throwable;
}