代码之家  ›  专栏  ›  技术社区  ›  user1578872

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

  •  0
  • user1578872  · 技术社区  · 7 年前

    @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名称来测试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]
    

    0 回复  |  直到 7 年前