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的依赖关系。
未完待续~~~持续更新