在多數情況下,配置Spring bean都是通過配置文件來實現,如下:
public class Product {
public void create(){
System.out.println("create Product");
}
}
public class Producer {
@Autowired
private Product product;
public void produce(){
System.out.println("開始生產.....");
product.create();
System.out.println("結束生產.....");
}
public void init(){
System.out.println("初始化生產者....");
}
public void destory(){
System.out.println("銷燬生產者....");
}
}
配置bean時:
<bean id="product" class="service.Product" >
<bean id="producer" class="service.Producer" init-method="init" destroy-method="destory">
然而,我們還可以純用java代碼的方式來實現Spring Bean的裝配和初始化,完成該工作需要引入Spring-Contextg.jar包,注意,如果引用重複的包,版本不同,可能會報錯:
org.springframework.core.GenericTypeResolver.resolveTypeArguments
建立類SpringConfig來管理所有的Bean.
@Configuration
public class SpringConfig {
@Bean
public Product createProductBean(){
return new Product();
}
@Bean(initMethod="init", destroyMethod="destory")
public Producer createProducerBean(){
return new Producer();
}
}
然後我們就可以通過SpringConfig來使用bean了。
public class Test {
public static void main(String[] args){
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
Producer producer = (Producer) context.getBean(Producer.class);
producer.produce();
}
}
輸出結果:
七月 03, 2015 10:01:33 上午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@512dbd1a: startup date [Fri Jul 03 10:01:33 CST 2015]; root of context hierarchy
七月 03, 2015 10:01:33 上午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@c710a3b: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,springConfig,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor,createProductBean,createProducerBean]; root of factory hierarchy
初始化生產者....
開始生產.....
create Product
結束生產.....
好處:
- 使用純java代碼,不在需要xml
- 在配置中也可享受OO帶來的好處
- 類型安全對重構也能提供良好的支持
- 依舊能享受到所有springIoC容器提供的功能