Java代碼實現Spring bean的初始化

在多數情況下,配置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容器提供的功能



發佈了73 篇原創文章 · 獲贊 18 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章