import 'reflect-metadata';
import { Express } from 'express';
import { DatabaseConfig } from '../database/DatabaseConfig';
export interface ApplicationConfig {
    port?: number;
    database?: DatabaseConfig;
    controllers?: (new (...args: any[]) => any)[];
    services?: (new (...args: any[]) => any)[];
    repositories?: (new (...args: any[]) => any)[];
    components?: (new (...args: any[]) => any)[];
    entities?: (new (...args: any[]) => any)[];
    basePath?: string;
    autoGenerateSchema?: boolean;
}
export declare class SpringApplication {
    private app;
    private container;
    private databaseManager;
    private config;
    constructor(config?: ApplicationConfig);
    /**
     * Setup Express middleware
     */
    private setupMiddleware;
    /**
     * Initialize database connection
     */
    initializeDatabase(): Promise<void>;
    /**
     * Register all components
     */
    registerComponents(): void;
    /**
     * Register all routes from controllers
     */
    registerRoutes(): void;
    /**
     * Create a route handler with parameter injection
     */
    private createRouteHandler;
    /**
     * Add custom middleware
     */
    use(middleware: any): void;
    /**
     * Get the Express app instance
     */
    getApp(): Express;
    /**
     * Start the application
     */
    run(): Promise<void>;
    /**
     * Stop the application
     */
    stop(): Promise<void>;
}
/**
 * Static method to run the application
 */
export declare function run(applicationClass: new () => SpringApplication, config?: ApplicationConfig): Promise<void>;
//# sourceMappingURL=SpringApplication.d.ts.map