直接从配置访问@Bean方法

时间:2018-09-12 20:51:47

标签: spring-boot dependency-injection

我有一个配置类,其中定义了一些bean。我可以直接从下面的服务中访问bean方法吗?

@Configuration
public class MyConfig{
   @Bean
   public Sample sample(int x){
       return new Sample(x);
   }
}

@Service
public class MyService{
     @Autowired
     MyConfig config;

     public void test(){
         Sample sample = config.sample(2);
     }
}

1 个答案:

答案 0 :(得分:0)

这可以通过使用BeanFactory接口(ApplicationContext实现)和所需bean的 prototype 范围来实现。

MyConfig类中,bean的范围应设置为“原型”:

// import org.springframework.context.annotation.Scope;

@Bean
@Scope("prototype")
public Sample sample(int x) {
  return new Sample(x);
}

然后,应插入config的实例,而不是在MyService中自动装配BeanFactory

@Autowired
private BeanFactory beanFactory;

要获取Sample bean的实例,应按以下方式调用它:

Sample sample = beanFactory.getBean(Sample.class, 1);