庄生晓梦

庄生晓梦迷蝴蝶

博客园 首页 新随笔 联系 订阅 管理
package com.tan.spring.ioc;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;

public class IOCDemo1 {

	/**
	 * 
	 * 控制反转模式( 也叫做依赖性介入) 基本的概念: 不创建对象,但是描述创建他们的方式.
	 * 在代码中不直接与对象和服务连接, 但是在配置文件中描述哪一个组件需要那一项服务
	 * 容器( Spring 框架中 是IOC容器) 负责这些联系在一起
	 * 
	 * 
	 * IOC场景中让其创建了所有的对象, 并设置必要的属性将他们联系在一起,决定什么时间调用方法
	 * 
	 * 实现的模式:
	 * ①: 服务需要实现专门的接口,通过接口,由对象提供这些服务,
	 * 	   可以从对象查询依赖性( 例如需要的附加的服务 )
	 * ②: 通过 JavaBean 的属性 (例如 setter 方法) 分配依赖性
	 * ③: 依赖性以构造函数的形式提供, 不以javabean属性的形式公开
	 * @param args
	 */
	public static void main(String[] args) {
		/*
		 * Spring设计的核心就是 org.springframework.beans 包,它的设计目标与 JavaBean组件一起使用。
		 * 这个包通常不是由用户直接使用, 而是由服务器将其用作其他的多数功能的底层中介。下一个最高级抽象是 
		 * BeanFactory接口,是工厂设计的模式的实现,允许通过名称创建和检索对象。
		 * BeanFactory也可以管理对象之间的关系.
		 * 
		 * BeanFactory 支持两个对象的模型。
		 * 	- 单态: 提供了具有特定名称的对象的共享实例,可以再查询时候对其进行检索。Singleton 是默认的也是最常用的对象的模型。对于无状态服务对象很理想。
		 *  - 原型: 确保每次检索都会创建单独的对象。在每个用户都需要自己的对象的时候,原型模型最适合。
		 * bean 工厂的概念是 Spring 作为 IOC 容器的基础。 IOC 将处理事情的责任从应用程序代码转义到框架。
		 * 
		 * */

		/*
		 * BeanFactory 接口 
		 * org.springframework.beans.factory.BeanFactory 是一个简单的接口,所以可以针对各种底层存储方法实现。最常用的BeanFactory 定义是
		 * XmlBeanFactory, 根据 Xml文件的定义装入 bean
		 * */

		// 实例化 Spring IOC 容器的方式一
		Resource resource = new FileSystemResource("mybean.xml");
		BeanFactory factory1 = new XmlBeanFactory(resource);

		// 实例化 Spring IOC 容器的方式二
		ClassPathResource classPathResource = new ClassPathResource(
				"mybean.xml");
		BeanFactory factory2 = new XmlBeanFactory(classPathResource);

		// 实例化 Spring IOC 容器的方式三
		ApplicationContext context1 = new FileSystemXmlApplicationContext(
				"mybean.xml");
		ApplicationContext context2 = new ClassPathXmlApplicationContext(
				new String[] { "applicationContext.xml",
						"applicationContext-part2.xml" });

		// of course, an ApplicationContext is just a BeanFactory
		BeanFactory factory3 = (BeanFactory) context1;
		BeanFactory factory4 = (BeanFactory) context2;

	}

}


package com.tan.spring.util;

import java.io.File;
import java.io.FilenameFilter;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

/**
 * 
 * @author Administrator
 *
 */
public class ApplicationContextUtil {
	
	private static ApplicationContext context;
	
	public static ApplicationContext buildApplicationContext(final String path) {
		if (path == null || path.trim().length() == 0) {
			String root = ApplicationContextUtil.class.getResource("/").getFile();
			File dir = new File(root);
			String[] xmls = dir.list(new FilenameFilter(){
				public boolean accept(File dir, String name) {
					return name.toLowerCase().endsWith(".xml");
				}
			});
			for (String xml : xmls) {
				System.out.println(xml);
			}
			return new ClassPathXmlApplicationContext(xmls);
		}
		return new FileSystemXmlApplicationContext(path);
	}
	
	public static ApplicationContext buildApplicationContext(final String ... paths) {
		if (paths == null || paths.length == 0) {
			return new ClassPathXmlApplicationContext("applicationContext.xml");
		}
		return new ClassPathXmlApplicationContext(paths);
	}
	
	public static ApplicationContext getApplicaionContext() {
		return context;
	}
}
posted on 2010-02-20 14:25  qwop  阅读(99)  评论(0编辑  收藏  举报