`

BeanFactory类

 
阅读更多

引用:在Spring Ioc容器的代表就是org.springframework.beans包中的BeanFactory接口,BeanFactory接口提供了IoC容器最基本功能;而org.springframework.context包下的ApplicationContext接口扩展了BeanFactory,还提供了与Spring AOP集成、国际化处理、事件传播及提供不同层次的context实现 (如针对web应用的WebApplicationContext)。简单说, BeanFactory提供了IoC容器最基本功能,而 ApplicationContext 则增加了更多支持企业级功能支持。ApplicationContext完全继承BeanFactory,因而BeanFactory所具有的语义也适用于ApplicationContext。

• XmlBeanFactoryBeanFactory实现,提供基本的IoC容器功能,可以从classpath或文件系统等获取资源;

  (1)  File file = new File("fileSystemConfig.xml");

           Resource resource = new FileSystemResource(file);

           BeanFactory beanFactory = new XmlBeanFactory(resource);

  (2)

          Resource resource = new ClassPathResource("classpath.xml");                 

          BeanFactory beanFactory = new XmlBeanFactory(resource);

• ClassPathXmlApplicationContextApplicationContext实现,从classpath获取配置文件;

         BeanFactory beanFactory = new ClassPathXmlApplicationContext("classpath.xml");

• FileSystemXmlApplicationContextApplicationContext实现,从文件系统获取配置文件。

 

         BeanFactory beanFactory = new FileSystemXmlApplicationContext("fileSystemConfig.xml");

 

首先,XmlBeanFactory的源码如下,其中 XmlBeanDefinitionReader来处理xml文件,注意,这里this是将BeanFactor对象作为参数传入XmlBeanDefinitionReader(解析xml)中,便于后期解析xml时将解析后的BeanDefinition(用于bean实例化)放入BeanFactory:

Resource类有关详细讲解可参考:http://jinnianshilongnian.iteye.com/blog/1416319

public class XmlBeanFactory extends DefaultListableBeanFactory {
	private final XmlBeanDefinitionReader reader;

	public XmlBeanFactory(Resource resource) throws BeansException {
		this(resource, (BeanFactory) null);
	}

	public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory)
			throws BeansException {
		super(parentBeanFactory);
		this.reader = new XmlBeanDefinitionReader(this);
		this.reader.loadBeanDefinitions(resource);
	}
}

 接下来看怎么处理的:

public class XmlBeanDefinitionReader extends AbstractBeanDefinitionReader {
        public int loadBeanDefinitions(Resource resource)
			throws BeanDefinitionStoreException {
		return this.loadBeanDefinitions(new EncodedResource(resource));
	}

        public int loadBeanDefinitions(EncodedResource encodedResource)
			throws BeanDefinitionStoreException {
		//...
                 arg4 = this.doLoadBeanDefinitions(inputSource,
							encodedResource.getResource());
                //...
	}


        protected int doLoadBeanDefinitions(InputSource inputSource,
			Resource resource) throws BeanDefinitionStoreException {
		try {
			Document ex = this.doLoadDocument(inputSource, resource);
			return this.registerBeanDefinitions(ex, resource);
		} catch (Exception arg3) {
			throw arg3;
		} 
	}

        public int registerBeanDefinitions(Document doc, Resource resource)
			throws BeanDefinitionStoreException {
		BeanDefinitionDocumentReader documentReader = this
				.createBeanDefinitionDocumentReader();
		int countBefore = this.getRegistry().getBeanDefinitionCount();
		documentReader.registerBeanDefinitions(doc,
				this.createReaderContext(resource));
		return this.getRegistry().getBeanDefinitionCount() - countBefore;
	}
}

 而这个时候,DefaultBeanDefinitionDocumentReader(处理xml)的实例,专门负责解析xml:

public class DefaultBeanDefinitionDocumentReader implements
		BeanDefinitionDocumentReader {
	public static final String BEAN_ELEMENT = "bean";
	public static final String NESTED_BEANS_ELEMENT = "beans";
	public static final String ALIAS_ELEMENT = "alias";
	public static final String NAME_ATTRIBUTE = "name";
	public static final String ALIAS_ATTRIBUTE = "alias";
	public static final String IMPORT_ELEMENT = "import";
	public static final String RESOURCE_ATTRIBUTE = "resource";
	public static final String PROFILE_ATTRIBUTE = "profile";
        //......
}

 

分享到:
评论

相关推荐

    使用BeanFactory实现创建对象

    然后,我们需要编写BeanFactory类,该类用于管理和创建对象。BeanFactory类的代码如下所示: ``` import java.io.InputStream; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; ...

    简单模拟Spring的beanFactory

    1. **Bean定义**:在Spring中,每个bean都有一个定义,包含它的类、依赖关系、初始化方法等信息。这些信息通常写在XML配置文件中,但也可以通过注解或编程方式定义。 2. **bean的实例化**:`BeanFactory`根据bean...

    1000行代码读懂Spring核心

    这个步骤涉及到了BeanDefinition类,它用于保存Bean及其配置信息,以及BeanFactory类,负责管理Bean的生命周期。 #### step-2:抽象BeanFactory和Bean初始化 第二个步骤是管理Bean的生命周期。通过创建抽象类...

    day38 05-Spring的BeanFactory与ApplicationContext区别

    此外,ApplicationContext还能够从多种类型的配置源(如XML、Java配置类、注解等)加载bean定义,使得配置更加灵活。 在实际应用中,通常推荐使用ApplicationContext,因为它更适合复杂的项目需求。然而,在内存...

    spring基础功能分享ppt课件.ppt

    Application Context模块建立在核心容器之上,扩展了BeanFactory类,添加了一些别的应用支持,比如I18N、应用生命周期事件等。 AOP模块支持应用对象之间的松耦合,DI也是我们开发程序时一直追求的方式。JDBC抽象及...

    spring基础功能分享参照.ppt

    1. **核心容器**:Spring的核心容器由BeanFactory类提供基础,它是所有Spring组件的基础。BeanFactory负责管理对象(beans)的生命周期和依赖关系,实现了依赖注入(Dependency Injection, DI)的基本原理。 2. **...

    Spring高级之注解驱动开发视频教程

    n 源码分析-BeanFactory类视图和常用工厂说明 n 源码分析-AnnotationConfigApplicationContext的register方法 n 源码分析-AnnotationConfigApplicationContext的scan方法 n 源码分析-AbstractApplicationContext的...

    BeanFactory面向接口编程测试工程

    在测试工程中,"test"目录下的文件可能是测试类或者配置文件,用于验证BeanFactory管理和依赖注入的功能是否正常工作。这些测试可能包括对bean的创建、属性注入、依赖关系的检查,以及不同实现间的切换等场景。 总...

    Spring-beans

    可被eclipse直接导入的Spring源码,Spring的BeanFactory类

    简单了解Spring中BeanFactory与FactoryBean的区别

    BeanFactory的实现类有DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等,它们分别从不同的维度扩展了BeanFactory的功能。 BeanFactory的主要方法包括: * getBean(String name):根据Bean的...

    spring中的BeanFactory解析xml文件

    在Spring框架中,实现BeanFactory接口的主要类是DefaultListableBeanFactory,它是最基础的IoC容器。 XML配置文件是Spring中定义bean及其依赖关系的传统方式。一个典型的Spring XML配置文件会包含若干个元素,每个...

    BeanFactory&&ApplicationContext;

    XML配置需要在配置文件中显式声明bean及其依赖关系,而注解配置则是在类或方法上使用如@Service、@Component、@Autowired等注解,让Spring自动扫描并管理bean。这两种方式各有优劣,XML配置更加灵活,适合复杂场景,...

    Spring的BeanFactory的接口注解

    - **功能**: 返回`BeanFactory`使用的类加载器,该类加载器通常用于加载Bean定义中的类。 - **返回值**: 类加载器对象。 - **应用场景**: 当需要确保Bean定义与实际Bean实例的类加载器一致时使用。 ##### 4. `void ...

    68-BeanFactory与FactoryBean1

    在 Spring 中,BeanFactory 是一个工厂类(接口),用于实例化和管理 Bean。它提供了许多方法来管理 Bean,包括 getBean()、containsBean()、isSingleton() 等。 FactoryBean 是 Spring 中的一种特殊的 Bean,它...

    Spring源码学习三:BeanFactory解析1

    DefaultListableBeanFactory还继承了`DefaultSingletonBeanRegistry`,这是一个内部类,专门负责管理单例Bean。它维护了一个单例对象的缓存,确保每次请求同一个单例Bean时返回的是同一个实例。同时,`...

    Java实现AOP功能的封装与配置的小框架实例代码

    BeanFactory类用于读取配置文件,根据配置创建相应的对象。 在配置文件中,我们可以定义要加载的类和对应的通知实现类。 例如,在配置文件中,我们可以定义xxx=java.util.ArrayList,xxx.advice=...

    Spring框架七大模块简单介绍

    SpringContext模块继承BeanFactory类,并且添加了事件处理、国际化、资源装载、透明装载、以及数据校验等功能。它还提供了框架式的Bean的访问方式和许多企业级的功能,如JNDI访问、支持EJB、远程调用、集成模板框架...

    个人总结常用经典Utils工具类

    1、Utils工具类有String工具类、XmlNode节点工具类、BeanFactory相关、Common工具类、Cookie工具类、Date工具类、Http工具类、JDBC工具类、日志Log工具类、Servlet相关等。2、工具类省了重复造轮子的工作,可以直接...

    Spring获取ApplicationContext对象工具类的实现方法

    本文将详细介绍Spring中获取ApplicationContext对象的工具类实现方法。 在Spring中,典型的获取ApplicationContext对象的方式是使用ApplicationContext接口的一个实现类,如ClassPathXmlApplicationContext。这是一...

Global site tag (gtag.js) - Google Analytics