import { ComponentMetadata } from '../annotation';
import { Newable } from '../utils';
export declare const AOP_TAG = "AOP_TAG";
export declare const MethodBeforeAdvice: unique symbol;
export declare const AfterReturningAdvice: unique symbol;
export declare const AfterThrowsAdvice: unique symbol;
export declare const AopProxyFactory: unique symbol;
export declare const ClassFilter: unique symbol;
export declare const MethodMatcher: unique symbol;
export interface Advice {
}
export interface BeforeAdvice extends Advice {
}
export interface AfterAdvice extends Advice {
}
export interface MethodBeforeAdvice extends BeforeAdvice {
    before(method: string | number | symbol, args: any[], target: any): Promise<void>;
}
export interface AfterReturningAdvice extends AfterAdvice {
    afterReturning(returnValue: any, method: string | number | symbol, args: any[], target: any): Promise<void>;
}
export interface AfterThrowsAdvice extends AfterAdvice {
    afterThrows(error: any, method: string | number | symbol, args: any[], target: any): Promise<void>;
}
export interface AopProxy {
    getProxy(): any;
}
export interface ProxyConfig {
    target: any;
    metadata: ComponentMetadata;
}
export interface AopProxyFactory {
    create(config: ProxyConfig): AopProxy;
}
export interface ClassFilter {
    matches(clazz: Newable<any>, metadata: ComponentMetadata): boolean;
}
export interface MethodMatcher {
    matches(method: string | number | symbol, clazz: Newable<any>, args: any[]): boolean;
}
//# sourceMappingURL=aop-protocol.d.ts.map