Зарегистрировать компонент (с произвольным именем компонента) программно - PullRequest
0 голосов
/ 25 января 2019

Моя цель состоит в том, чтобы программно зарегистрировать бин (с пользовательским именем бина).

@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 проектом.Есть ли другой способ установить имя компонента программно, даже если я использую область действия прототипа.

...