-
Notifications
You must be signed in to change notification settings - Fork 265
Open
Description
支持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
Labels
No labels