1. 程式人生 > >Springboot@Configuration和@Bean詳解

Springboot@Configuration和@Bean詳解

targe scope span div let con 實例 asf pub

Springboot@Configuration和@Bean詳解

一、@Configuration

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";
}

可以看到在@Configuration註解中是包含@Component註解的,被@Configuration修飾的類被定義為一個Spring容器(應用上下文)

@Configuration就相當於Spring配置文件中的<beans />標簽,裏面可以配置bean

二、@Bean

@Bean相當於Spring配置文件中的<bean />標簽可以在Spring容器中註入一個bean

@Configuration
public class TestConfiguration {

    @Bean
    public TestBean testBean() {
        return new TestBean();
    }

}

上述代碼相當於實例化一個TestBean並交給Spring容器管理

ps:

1、@Bean註解在返回實例的方法上,如果未通過@Bean指定bean的名稱,則默認與方法名相同

2、@Bean註解默認作用域為單例singleton作用域,可通過@Scope(“prototype”)設置為多例

三、依賴註入

@Configuration
public class TestConfiguration {

    @Bean
    public TestBean testBean() {
        return new TestBean();
    }

    @Bean
    public DIBean diBean() {
        return new DIBean(testBean());
    }  

}

如上述代碼,通過在@Bean方法中調用

其他@Bean註解的方法來實現依賴註入

ps:

當需要強制指定實例化bean的順序,可以通過@Order或@DependsOn註解來實現

Springboot@Configuration和@Bean詳解