@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Configuration { @AliasFor( annotation = Component.class ) String value() default ""; }
能够看到在@Configuration注解中是包含@Component注解的,被@Configuration修饰的类被定义为一个Spring容器(应用上下文)spa
@Configuration就至关于Spring配置文件中的<beans />标签,里面能够配置beanprototype
@Bean至关于Spring配置文件中的<bean />标签能够在Spring容器中注入一个beancode
@Configuration public class TestConfiguration { @Bean public TestBean testBean() { return new TestBean(); } }
上述代码至关于实例化一个TestBean并交给Spring容器管理blog
ps: 作用域
一、@Bean注解在返回实例的方法上,若是未经过@Bean指定bean的名称,则默认与方法名相同get
二、@Bean注解默认做用域为单例singleton做用域,可经过@Scope(“prototype”)设置为多例io
@Configuration public class TestConfiguration { @Bean public TestBean testBean() { return new TestBean(); } @Bean public DIBean diBean() { return new DIBean(testBean()); } }
如上述代码,经过在@Bean方法中调用其余@Bean注解的方法来实现依赖注入class
ps:test
当须要强制指定实例化bean的顺序,能够经过@Order或@DependsOn注解来实现容器