实例化BeanFactory的三种方法

来源:互联网 发布:ubuntu安装 编辑:程序博客网 时间:2024/04/28 15:38

Java代码
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;

}

}


Java代码
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;
}
}