天天看點

SpringFramework核心技術一(IOC:使用ICO容器)一、二、下面我們來用一下

使用容器

這ApplicationContext是進階工廠的接口,能夠維護不同bean及其依賴項的系統資料庫。使用該方法T getBean(String name, Class requiredType)可以檢索bean的執行個體。

一、

在ApplicationContext可以讀取bean定義并通路它們,如下所示:

1.1 怎麼使用容器

首先來看一下容器:

1.2

有很多同學一上來就是搞一個New,可是這是一個ApplicationContext接口啊。

//接口是不能直接new着用的,這個是重寫。
ApplicationContext applicationContext = new ApplicationContext(){...}           

1.3

下面這樣用才是對的:ClassPathXmlApplicationContext是類

/**
 * @author:wangdong
 * @description:怎麼使用容器
 */
public class Test {

    public static void main(String[] args) {

        // create and configure beans
        //可以從XML檔案中讀取需要配置Bean并且加載進容器中
        ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
    }           

看一下ClassPathXmlApplicationContext類

二、下面我們來用一下

package org.springframework.test;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.beans.factory.groovy.GroovyBeanDefinitionReader;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.ApplicationContext;
import org.springframework.context.MessageSourceResolvable;
import org.springframework.context.NoSuchMessageException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.context.support.GenericGroovyApplicationContext;
import org.springframework.core.ResolvableType;
import org.springframework.core.env.Environment;
import org.springframework.core.io.Resource;

import java.io.IOException;
import java.lang.annotation.Annotation;
import java.util.Locale;
import java.util.Map;

/**
 * @author:wangdong
 * @description:怎麼使用容器
 */
public class Test {

    public static void main(String[] args) {

        // create and configure beans
        ApplicationContext context1 = new ClassPathXmlApplicationContext("services.xml", "daos.xml");

        // retrieve configured instance(檢索配置執行個體Bean)
        //如果PetStoreService已經建立,并且在上面的.xml檔案中已經配置
        PetStoreService service = context1.getBean("petStore", PetStoreService.class);

        //GenericApplicationContext和ClassPathXmlApplicationContext類似
        //隻不過這裡使用的是.groovy字尾檔案
        //使用Groovy配置,bootstrapping看起來非常相似,隻是一個不同的上下文實作類,它可以感覺Groovy(但也了解XML bean定義):
        ApplicationContext context2 = new GenericGroovyApplicationContext("services.groovy", "daos.groovy");

        //最靈活的變體是GenericApplicationContext與.groovy和.xml結合使用
        GenericApplicationContext context3 = new GenericApplicationContext();
        //用于.xml字尾的檔案
        new XmlBeanDefinitionReader(context3).loadBeanDefinitions("services.xml", "daos.xml");
        //用于.groovy字尾的檔案
        new GroovyBeanDefinitionReader(context3).loadBeanDefinitions("services.groovy", "daos.groovy");

    }
}
           

可以使用它getBean來檢索bean的執行個體。該ApplicationContext 接口還有其他一些檢索bean的方法,但理想情況下,應用程式代碼不應該使用它們。事實上,你的應用程式代碼根本不應該調用該 getBean()方法,是以完全不依賴于Spring API。例如,Spring與Web架構的內建為各種Web架構元件(如控制器和JSF托管的bean)提供了依賴注入,允許您通過中繼資料(例如自動裝配注釋)聲明對特定Bean的依賴關系。

未完待續~~~持續更新