Skip to content

支持micronaut框架 #511

@laifugroup

Description

@laifugroup

支持micronaut

<micronaut.version>4.10.1</micronaut.version>

  <dependency>
            <groupId>io.micronaut</groupId>
            <artifactId>micronaut-context</artifactId>
            <version>${micronaut.version}</version>
            <scope>provided</scope>
        </dependency>


import com.iohao.game.action.skeleton.core.ActionCommand;
import com.iohao.game.action.skeleton.core.ActionFactoryBean;
import com.iohao.game.action.skeleton.core.DependencyInjectionPart;
import io.micronaut.context.ApplicationContext;
import jakarta.inject.Singleton;
import lombok.Getter;

import java.util.Objects;


@SuppressWarnings("unchecked")
public class ActionFactoryBeanForMicronaut<T> implements ActionFactoryBean<T> {

    private ApplicationContext applicationContext;
    @Getter
    boolean micronaut;

    @Override
    public T getBean(ActionCommand actionCommand) {
        Class<?> actionControllerClazz = actionCommand.getActionControllerClazz();
        return (T) this.applicationContext.getBean(actionControllerClazz);
    }

    @Override
    public T getBean(Class<?> actionControllerClazz) {
        return (T) this.applicationContext.getBean(actionControllerClazz);
    }

    /**
     * 设置 micronaut ApplicationContext
     *
     * @param applicationContext micronaut application context
     */
    public void setApplicationContext(ApplicationContext applicationContext) {
        Objects.requireNonNull(applicationContext);

        initDependencyInjectionPart();

        this.micronaut = true;

        this.applicationContext = applicationContext;
    }

    private void initDependencyInjectionPart() {
        DependencyInjectionPart dependencyInjectionPart = DependencyInjectionPart.me();

        dependencyInjectionPart.setInjection(true);

        dependencyInjectionPart.setAnnotationClass(Singleton.class);

        dependencyInjectionPart.setActionFactoryBean(this);
    }

    private ActionFactoryBeanForMicronaut() {
    }

    public static ActionFactoryBeanForMicronaut me() {
        return Holder.ME;
    }

    /** 通过 JVM 的类加载机制, 保证只加载一次 (singleton) */
    private static class Holder {
        static final ActionFactoryBeanForMicronaut ME = new ActionFactoryBeanForMicronaut();
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions