spring in action 學習筆記三:對spring 容器的理解,以及如何利用AnnotationConfigApplicationContext這個容器創建對象


   一: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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM