Spring的@Bean注解用于告訴方法,產生一個Bean對象,然后這個Bean對象交給Spring管理。產生這個Bean對象的方法Spring只會調用一次,隨后這個Spring將會將這個Bean對象放在自己的IOC容器中。
@Service
public class BeanTest {
@Bean
public BeanTest getBean(){
BeanTest bean = new BeanTest();
System.out.println("調用方法:"+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);
}
}
輸出:
調用方法: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("調用方法:"+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
注解的好處就是能夠動態獲取一個Bean對象,能夠根據環境不同得到不同的Bean對象。或者說將Spring和其他組件分離(其他組件不依賴Spring,但是又想Spring管理生成的bean)。