@Configuration注解标识的类中声明了1个或者多个@Bean方法,Spring容器可以使用这些方法来注入Bean,比如:
@Configuration
public class AppConfig {
//这个方法就向Spring容器注入了一个类型是MyBean名字是myBean的Bean
@Bean
public MyBean myBean() {
// instantiate, configure and return bean ...
}
}
@Configuration类一般是由AnnotationConfigApplicationContext或者它的web变种AnnotationConfigWebApplicationContext来处理的,比如:
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
//这是configuration类
ctx.register(AppConfig.class);
ctx.refresh();
MyBean myBean = ctx.getBean(MyBean.class);
// use myBean ...
也可以用以XML方式引入,就跟引入普通的Bean是一样的:
<beans>
<context:annotation-config/>
<!--也可以这样加载configuration类-->
<bean class="com.acme.AppConfig"/>
</beans>
上例中,为了启用ConfigurationClassPostProcessor和其他的注解相关的Post Processor来处理@Configuration,需要添加<context:annotation-config/>。
组件扫描的方式使用
@Configuration上面添加了@Component元注解,因此, @Configuration是支持组件扫描的(一般要添加<context:component-scan/> ) ,它跟其他普通的Component一样也支持@Autowired/@Inject,如果@Configuration的类有一个构造函数,也支持构造函数自动注入,比如:
@Configuration
public class AppConfig {
private final SomeBean someBean;
//构造函数注入
public AppConfig(SomeBean someBean) {
this.someBean = someBean;
}
//注入另一个bean
@Autowired
private AnotherBean1 anotherBean1;
//注入另一个bean
@Resource
private AnotherBean2 anotherBean2;
// @Bean definition using "SomeBean"
}
@Configuration 类不仅可以被扫