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

cn.k7g.alloy.annotation.MoldObject Maven / Gradle / Ivy

package cn.k7g.alloy.annotation;

import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Component;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 将标注对象注册到 mold,提供额外的扩展方法支持
 *
 * 必须满足以下两个条件才会被成功注册:
 * 1. 被注册的对象或者方法必须是 public
 * 2. 对象必须是spring bean
 * @author victor-wu
 * @date 2024年4月3日
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Component
public @interface MoldObject {

    /**
     * 注册到spring 容器中的名称
     */
    @AliasFor(annotation = Component.class)
    String value() default "";


    /**
     * 注册范围
     * 默认是以 Object 注册,调用方式为 moldObject.hello()
     * @return
     */
    Scope[] scope() default {Scope.OBJECT, Scope.METHOD};

//    /**
//     * 调用的名称,如果不填写默认是类名的小驼峰命名法,例如:moldObject.hello()
//     * @return
//     */
//    String name() default "";


    /**
     * 注册选定的范围,被注册的对象或方法必须是公开的,否则都会被忽略
     */
    enum Scope {
        /**
         * 以标注对象注册,调用方式为 moldObject.hello()
         * 在被注册的对象下的方法不用再标记 @MoldMethod, 除非你想忽略某个方法的注册
         */
        OBJECT,
        /**
         * 检查对象下带有 @MoldMethod 注解的方法进行注册,调用方式为:hello()
         */
        METHOD
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy