我的目标是以编程方式注册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名称。