Моя цель состоит в том, чтобы программно зарегистрировать бин (с пользовательским именем бина).
@ComponentScan({ "com.test" })
public class AppConfiguration {
//@Bean("test-bean")
@Bean
public Definition definition() {
return () -> Test.class;
}
}
@Named
@Scope("prototype")
public class Test extends DefinitionActor<?> {
....
}
Здесь я использую Akka и, следовательно, мне нужно использовать @Scope ("prototype").
По какой-то причине я не хочу жестко кодировать имя компонента для тестового компонента.
Следовательно, я использую BeanPostProcessor.
@Component
public class BeanDefinitionRegistryPP implements BeanDefinitionRegistryPostProcessor, EnvironmentAware {
private Environment env;
@Override
public void setEnvironment(final Environment environment) {
this.env = environment;
}
@Override
public void postProcessBeanDefinitionRegistry(final BeanDefinitionRegistry registry) throws BeansException {
}
Я получаю ошибку AKKAесли я пойду с этим путем.
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 проектом.Есть ли другой способ установить имя компонента программно, даже если я использую область действия прототипа.