以编程方式注册bean(使用自定义bean名称)

时间:2019-01-24 22:13:37

标签: java spring akka

我的目标是以编程方式注册bean(使用自定义bean名称)。

@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”)。

出于某种原因,我不想将bean名称硬编码为test-bean。

因此,我正在使用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]

bean后处理器可与非Akka项目一起使用。即使我使用原型作用域,还有其他方法可以通过编程方式设置Bean名称。

0 个答案:

没有答案