@Bean是一個方法級別上的注解,主要用在@Configuration注解的類里,也可以用在@Component注解的類里。添加的bean的id為方法名。
定義bean
下面是@Configuration里的一個例子:
@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,我們可以通過方法參數實現這個依賴:
@Configuration public class Config { @Bean public User user(Person person){ return new User(person); } @Bean public Person person(){ return new Person(); } }
如果Person沒有注入的話那么
public User user(Person person)
這一段代碼會提示無法注入person,這就相當於xml中的注入時的<property>。
接受生命周期的回調
任何使用@Bean定義的bean,也可以執行生命周期的回調函數,類似@PostConstruct and @PreDestroy的方法。用法如下:
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="")來防止出發銷毀方法。
指定bean的scope
使用@Scope注解
你能夠使用@Scope注解來指定使用@Bean定義的bean:
@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(); } }