package com.elab.core.aop.annotations;

import com.elab.core.spring.DaoScannerRegister;
import com.elab.core.spring.config.BasicDaoConfig;
import com.elab.core.spring.config.DataSourceConfigBean;
import com.elab.core.spring.config.TransactionConfigBean;
import org.springframework.context.annotation.Import;

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import({DaoScannerRegister.class, DataSourceConfigBean.class, BasicDaoConfig.class, TransactionConfigBean.class})
public @interface EnableElabDB {
    /**
     * Alias for the {@link #basePackages()} attribute. Allows for more concise annotation
     * declarations e.g.: {@code @ComponentScan("org.my.pkg")} instead of
     * {@code @ComponentScan(basePackages="org.my.pkg")}.
     *
     * @return the array of 'basePackages'.
     */
    String[] value() default {};

    /**
     * Base packages to scan for annotated components.
     * <p>
     * {@link #value()} is an alias for (and mutually exclusive with) this attribute.
     * <p>
     * Use {@link #basePackageClasses()} for a type-safe alternative to String-based
     * package names.
     *
     * @return the array of 'basePackages'.
     */
    String[] basePackages() default {};

    /**
     * Type-safe alternative to {@link #basePackages()} for specifying the packages to
     * scan for annotated components. The package of each class specified will be scanned.
     * <p>
     * Consider creating a special no-op marker class or interface in each package that
     * serves no purpose other than being referenced by this attribute.
     *
     * @return the array of 'basePackageClasses'.
     */
    Class<?>[] basePackageClasses() default {};

    /**
     * SQL文件的存放路径
     *
     * @return
     */
    String sqlConfigurableLocations() default "sql";

    /**
     * 数据代理，一旦启用数据路由的SQL将会转发到指定的实现类上来
     *
     * @return
     */
    String proxyDataProcessName() default "";

}
