@Bean 的用法

@Bean是一個方法級別上的註解,主要用在@Configuration註解的類裏,也能夠用在@Component註解的類裏。添加的bean的id爲方法名。java

定義bean

下面是@Configuration裏的一個例子:redis

@Configuration
public class Config {

    @Bean
    public User user(){
        return  new User();
    }
}

這個配置就等同於以前在xml裏的配置:函數

<beans>
    <bean id="user" class="com.redisUtil.model.User"/>
</beans>

bean的依賴

@bean 也能夠依賴其餘任意數量的bean,若是User依賴 Person,咱們能夠經過方法參數實現這個依賴:this

@Configuration
public class Config {

    @Bean
    public User user(Person person){
        return  new User(person);
    }

    @Bean
    public Person person(){
        return new Person();
    }
}

若是Person沒有注入的話那麼spa

public User user(Person person)

這一段代碼會提示沒法注入person,這就至關於xml中的注入時的<property>。prototype

接受生命週期的回調

任何使用@Bean定義的bean,也能夠執行生命週期的回調函數,相似@PostConstruct and @PreDestroy的方法。用法以下:code

public class User implements Serializable{

    public void init(){
        System.out.println("User的初始化方法");
    }
    public void destroy(){
        System.out.println("User的銷燬化方法");
    }
    .....
@Configuration
public class Config {

    @Bean(initMethod = "init",destroyMethod = "destroy")
    public User user(){
        return  new User();
    }
}

默認使用javaConfig配置的bean,若是存在close或者shutdown方法,則在bean銷燬時會自動執行該方法,若是你不想執行該方法,則添加@Bean(destroyMethod="")來防止出發銷燬方法。xml

指定bean的scope

使用@Scope註解

你可以使用@Scope註解來指定使用@Bean定義的bean:blog

@Configuration
public class Config {

    @Bean
    @Scope("prototype")
    public User user(){
        return  new User();
    }
}

自定義bean的命名

默認狀況下bean的名稱和方法名稱相同,你也能夠使用name屬性來指定:生命週期

@Configuration
public class Config {

    @Bean(name= "myUser")
    public User user(){
        return  new User();
    }
}

bean的別名

bean的命名支持別名,使用方法以下:

@Configuration
public class Config {

    @Bean(name = {"myUser,myUser1,myUser2"})
    public User user(){
        return  new User();
    }
}

bean的描述

有時候提供bean的詳細信息也是頗有用的,bean的描述能夠使用 @Description來提供:

@Configuration
public class Config {

    @Bean
    @Description(value = "this is a test")
    public User user(){
        return  new User();
    }
}
相關文章
相關標籤/搜索