【发布时间】:2019-01-25 04:39:45
【问题描述】:
我想了解一下下面的代码是如何工作的。
@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。此外,返回类型是一个函数接口,实际状态类没有实现,也不知道它是如何工作的。这是基于 Akka 演员模型。
AbstractStateActorActor extends AbstractUntypedActor
在这里,我想以编程方式设置 bean 名称,而不是通过注解设置。
@Bean("测试")
如果我尝试使用 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]
有什么帮助吗?
【问题讨论】: