zoukankan      html  css  js  c++  java
  • Spring 实例化BeanFactory 的方式

    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;
    	}
    }
    
  • 相关阅读:
    自动化运维工具——ansible剧本playbook(三)
    自动化运维工具——ansible系列命令
    自动化运维工具——ansible命令使用(二)
    自动化运维工具——ansible安装入门(一)
    SSH密钥验证
    es中的或加should
    es聚合后比较结果显示
    es聚合having count>0
    类的内部调用和多线程调用解决事务、aop失效的问题
    es注意点
  • 原文地址:https://www.cnblogs.com/qwop/p/6637249.html
Copyright © 2011-2022 走看看