Spring的@Bean注解用于告訴方法,產(chǎn)生一個Bean對象,然后這個Bean對象交給Spring管理。產(chǎn)生這個Bean對象的方法Spring只會調(diào)用一次屠阻,隨后這個Spring將會將這個Bean對象放在自己的IOC容器中。
@Service
public class BeanTest {
@Bean
public BeanTest getBean(){
BeanTest bean = new BeanTest();
System.out.println("調(diào)用方法:"+bean);
return bean;
}
}
public class Main {
@SuppressWarnings("unused")
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");
Object bean1 = context.getBean("getBean");
System.out.println(bean1);
Object bean2 = context.getBean("getBean");
System.out.println(bean2);
}
}
輸出:
調(diào)用方法:Spring.BeanTest@5a4041cc
Spring.BeanTest@5a4041cc
Spring.BeanTest@5a4041cc
默認bean的名稱就是其方法名额各。但是也可以指定名稱:
@Service
public class BeanTest {
@Bean(name="BeanTest")
public BeanTest getBean(){
BeanTest bean = new BeanTest();
System.out.println("調(diào)用方法:"+bean);
return bean;
}
}
public class Main {
@SuppressWarnings("unused")
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");
Object bean1 = context.getBean("BeanTest");
System.out.println(bean1);
Object bean2 = context.getBean("BeanTest");
System.out.println(bean2);
}
}
使用@Bean
注解的好處就是能夠動態(tài)獲取一個Bean對象国觉,能夠根據(jù)環(huán)境不同得到不同的Bean對象∠豪玻或者說將Spring和其他組件分離(其他組件不依賴Spring麻诀,但是又想Spring管理生成的bean)。