一:spring的容器就是bean所居住的地點,這個居民點有很多的bean,有外來的bean(相當於創建了一個bean),有出去謀生的(相當於消亡了一個bean),他們之間都有某種聯系
(bean與bean之間的聯系spring通過wiring 來實現)。而這個居民點在spring中就是BeanFactory這個接口,至於ClassPathXmlApplicationContext、AnnotationConfigApplicationContext、 AnnotationConfigWebApplicationContext、FileSystemApplicationContext等這些我們經常用的容器要么是BeanFactory的實現類,要么是BeanFactory的子類。
如下幫助文檔所示:
1 org.springframework.beans.factory 2 Interface BeanFactory 3 All Known Subinterfaces: 4 ApplicationContext, AutowireCapableBeanFactory, ConfigurableApplicationContext, ConfigurableBeanFactory, ConfigurableListableBeanFactory, ConfigurablePortletApplicationContext, ConfigurableWebApplicationContext, HierarchicalBeanFactory, ListableBeanFactory, WebApplicationContext 5 All Known Implementing Classes: 6 AbstractApplicationContext, AbstractAutowireCapableBeanFactory, AbstractBeanFactory, AbstractRefreshableApplicationContext, AbstractRefreshableConfigApplicationContext, AbstractRefreshablePortletApplicationContext, AbstractRefreshableWebApplicationContext, AbstractXmlApplicationContext, AnnotationConfigApplicationContext, AnnotationConfigWebApplicationContext, ClassPathXmlApplicationContext, DefaultListableBeanFactory, FileSystemXmlApplicationContext, GenericApplicationContext, GenericWebApplicationContext, GenericXmlApplicationContext, ResourceAdapterApplicationContext, SimpleJndiBeanFactory, StaticApplicationContext, StaticListableBeanFactory, StaticPortletApplicationContext, StaticWebApplicationContext, XmlBeanFactory, XmlPortletApplicationContext, XmlWebApplicationContext
而BeanFactory單從字面的意思也顯而易見"Bean 工廠"、工廠自然是這些工人(Bean)生活居住的地點。在spring中的Bean就是javaBean,對應一個java類。
二:如何使用AnnotationConfigApplicationContext這個容器:
這個容器專門是為注解方式而設計的,(這里用的是注解,而不是xml配置的方式)
他的核心演示代碼如下:
1 package com.qls.test; 2 3 import com.qls.impl.BraveKnight; 4 import com.qls.impl.SlayDragonQuest; 5 import com.qls.inter.Knight; 6 import com.qls.inter.Query; 7 import org.springframework.context.annotation.Bean; 8 import org.springframework.context.annotation.Configuration; 9 10 /** 11 * Created by ${秦林森} on 2017/6/6. 12 */ 13 14 /** 15 * @Bean indicated that a method produced a bean to be managed by the spring container; 16 * @Bean indicated that a method produced a bean to be managed by the spring container; 17 * @Bean indicated that a method produced a bean to be managed by the spring container. 18 */ 19 @Configuration 20 public class KnightConfig { 21 @Bean(name = "knight") 22 public Knight knight(){ 23 return new BraveKnight(quest()); 24 } 25 @Bean(name = "quest") 26 public Query quest(){ 27 return new SlayDragonQuest(System.out); 28 } 29 }
1 package com.qls.test; 2 3 import com.qls.inter.Knight; 4 import org.springframework.context.annotation.AnnotationConfigApplicationContext; 5 6 /** 7 * Created by ${秦林森} on 2017/6/6. 8 */ 9 public class Test4 { 10 public static void main(String[] args) { 11 AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(KnightConfig.class); 12 Knight knight = ac.getBean(Knight.class); 13 knight.embarkOnQuest(); 14 } 15 }