Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用springbean的函数接口_Java_Spring_Java 8_Functional Interface - Fatal编程技术网

Java 调用springbean的函数接口

Java 调用springbean的函数接口,java,spring,java-8,functional-interface,Java,Spring,Java 8,Functional Interface,我想映射特定类型以触发Spring方法 我通过键保存函数接口的映射,函数将调用Spring服务方法,但我有一个问题,它必须是静态的,例如: private Map<Pair<Type, Boolean>, Function<User, Boolean>> functionInterfaces = new HashMap<>(); { functionInterfaces .put(Pair.of(Type.MY_TYPE, Boolea

我想映射特定类型以触发Spring方法

我通过键保存函数接口的映射,函数将调用Spring服务方法,但我有一个问题,它必须是静态的,例如:

 private Map<Pair<Type, Boolean>, Function<User, Boolean>> functionInterfaces = new HashMap<>();
 {
    functionInterfaces .put(Pair.of(Type.MY_TYPE, Boolean.TRUE), MySpringService::myTypeMethod);
 }
我是否应该静态加载SpringBean以调用静态方法:

private static final MySpringService mySpringService = ApplicationInitializer.getAppContext().getBean(MySpringService.class);

或者没有静态初始化SpringBean还有更好的方法吗?

我会在定义映射的Bean上使用Spring的
初始化Bean
接口。 然后在bean中使用
@Autowire
您的
MySpringService


最后,在
afterPropertiesSet()
方法中,放置映射初始化代码,但使用自动连线
MySpringService
来注册方法调用,因此,您不需要从静态上下文调用Springbean。

可能相关:。@JohnBollinger但我目前需要从静态上下文调用bean从静态上下文调用Springbean是毫无意义的,因为您正在失去依赖注入的所有好处。为什么是静态上下文?我想你还有一个问题,比这个问题更严重。请解释所有问题,以便用户能更好地帮助您。@Federicoperaltachaffner我想使用基于类型/枚举键和布尔切换的上下文调用不同的方法。但这是一个过于笼统的问题。不是吗?@user7294900所有这些方法都在同一个类中吗?它们是实例方法吗?他们有相同的签名吗?你为什么需要这个功能?你能链接到
AfterPropertieSet()
的文档或示例吗?它与使用
@PostConstruct
方法相同吗?当然,我不确定与
@PostConstruct
有什么相似之处。选中此复选框,我也将更改为使用非静态
this::myTypeMethod
private static final MySpringService mySpringService = ApplicationInitializer.getAppContext().getBean(MySpringService.class);