gpt4 book ai didi

java - Lambda 运算符 () -> 是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 06:41:55 24 4
gpt4 key购买 nike

我想了解以下代码的工作原理。

@Bean
public StateHandlerDef handler() {
return () -> StateOne.class;
}

@Named
@Scope("prototype")
public class StateOne extends AbstractStateActorActor<StatObject> {

@Inject
public StateOne(final Props prop, final StatRegistry statRegistry) {
super("test", transformationConfig, GenericStateObject.class, statRegistry);
}
}

@FunctionalInterface
public interface StateHandlerDef {
Class<? extends AbstractUntypedActor> getHandlerClass();
}

这是工作代码。

我想了解,这里的 bean 创建是如何工作的。

下面的代码创建了一个 bean。

@Bean
public StateHandlerDef handler() {
return () -> StateOne.class;
}

StateOne 类有一个构造函数。但是,这会在不传递构造函数参数的情况下创建 bean。此外,返回类型是一个函数接口(interface),它不是由实际状态类实现的,并且不确定它是如何工作的。这是基于 Akka Actor 模型。

AbstractStateActorActor extends AbstractUntypedActor

在这里,我想以编程方式设置 bean 名称,而不是通过注释设置。

@Bean("test")

如果我尝试使用 BeanPostProcessor 以编程方式设置 bean 名称,它会抛出无法使用 new 创建实例且应使用 actorof 创建实例的错误。

Caused by: akka.actor.ActorInitializationException: You cannot create an instance of [com.test.Test] explicitly using the constructor (new). You have to use one of the 'actorOf' factory methods to create a new actor. See the documentation.
at akka.actor.ActorInitializationException$.apply(Actor.scala:181) ~[akka-actor_2.11-2.4.19.jar:na]

有什么帮助吗?

最佳答案

要理解这一点,请这样想。您尝试扩展的库(在本例中为 akka)需要知道将要处理状态的类。为此,它获取类型为 StateHandlerDef 的实例(bean)。此实例由以下代码中的 lambda 表达式创建:

@Bean
public StateHandlerDef handler() {
return () -> StateOne.class;
}

相当于:

@Bean
public StateHandlerDef handler() {
return new StateHanderDefImpl();
}

库将使用它来获取 StateOne.class,它将为其寻找一个 bean 并从依赖注入(inject)框架中获取它。该 bean 在这里定义:

@Named
@Scope("prototype")
public class StateOne extends AbstractStateActorActor<StatObject> {

@Inject
public StateOne(final Props prop, final StatRegistry statRegistry) {
super("test", transformationConfig, GenericStateObject.class, statRegistry);
}
}

DI 框架将通过在其构造函数中注入(inject)所需的依赖项,从此类创建一个 bean。

关于java - Lambda 运算符 () -> 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54359012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com