- @Bean注解用在方法上,表示该方法返回一个被Spring容器管理的bean。
例如:
@Bean
public MyBean myBean() {
// instantiate and configure MyBean obj
return obj;
}
- 如果没有指定bean的名字,spring就使用被 @Bean注解的方法的名字。
例如下面这段代码,bean的名字是myBean:
@Bean
public MyBean myBean() {
// instantiate and configure MyBean obj
return obj;
}
- 当然,也可以使用Bean的属性指定bean的名字。
例如下面这段代码,bean的主名字是b1,别名是b2:
@Bean({“b1”, “b2”})
public MyBean myBean() {
// instantiate and configure MyBean obj
return obj;
}
- 通常,被@Bean注解的方法在被 @Configuration注解的类中声明。在这种情况下,bean方法可以通过直接调用来引用被在同一个类中其它被@Bean注解的方法,这种引用称为’inter-bean references’。
例如:
@Configuration
public class AppConfig {
@Bean
public FooService fooService() {
return new FooService(fooRepository());
}
@Bean
public FooRepository fooRepository() {
return new JdbcFooRepository(dataSource());
}
// ...
}
- 被@Bean注解的方法也可以在没有被 @Configuration注解的类中声明。这称为 Lite Mode。
例如:
@Component
public class Calculator {
public int sum(int a, int b) {
return a+b;
}
@Bean
public MyBean myBean() {
return new MyBean();
}
}