@Bean是一個方法級別上的註解,主要用在@Configuration註解的類裏,也能夠用在@Component註解的類裏。添加的bean的id爲方法名。java
下面是@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,若是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
你可以使用@Scope註解來指定使用@Bean定義的bean:blog
@Configuration public class Config { @Bean @Scope("prototype") public User user(){ return new User(); } }
默認狀況下bean的名稱和方法名稱相同,你也能夠使用name屬性來指定:生命週期
@Configuration public class Config { @Bean(name= "myUser") public User user(){ return new User(); } }
bean的命名支持別名,使用方法以下:
@Configuration public class Config { @Bean(name = {"myUser,myUser1,myUser2"}) public User user(){ return new User(); } }
有時候提供bean的詳細信息也是頗有用的,bean的描述能夠使用 @Description來提供:
@Configuration public class Config { @Bean @Description(value = "this is a test") public User user(){ return new User(); } }