Spring的核心是IoC容器,IoC的核心是无须程序员自行完成对象的实例化和对象间关系的装配。Spring中通过BeanFactory或其子接口类型ApplicationContext完成该项工作。Spring中有关对象的实例化可以实现:
1. 构造方法实例化;
2. 静态工厂方法实例化;
3. 实例工厂方法实例化;
4. FactoryBean实例化等;
实例化的对象可以放置于各种不同的作用范围:
1. singleton;
2. prototype;
3. request;
4. session;
5. global session以及甚至可以自行定义作用范围;
对象关系装配时可以装配的对象为:
1. 基本类型;
2. String类型;
3. 数组类型;
4. List类型;
5. Map类型;
6. Properties类型;
7. 自行定义的Bean对象等;
装配时可以采用:
1. setter注入;
2. 构造子注入;
我们也可以不看Spring源码,通过自行编写BeanFactory,感受IoC需要对象,召之即来的痛快。在接下来的BeanFactory源码中,只实现了:
1. 通过构造方法完成对象的实例化,而且均是单个实例;
2. 通过setter注入方式注入String和自行定义的Bean对象;
源码如下:
package common;
import java.lang.reflect.Method;
import java.util.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.*;
public class MyBeanFactory {
private Map<String, Object> map=
new HashMap<String, Object>();
public MyBeanFactory(String path) {
DocumentBuilderFactory f=
DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder=
f.newDocumentBuilder();
Document document=builder.parse(path);
//实例化对象
buildBeanObject(document);
//建立对象间关系
buildBeanObjectRelation(document);
}catch(Exception e) {
throw new RuntimeException(e);
}
}
/**
* 1. 读取配置文件<bean>标记中class属性值用以
* 实例化成对象存入Map作为Value;
* 2. 读取配置文件<bean>标记中id属性值存入
* Map作为Key;
*
* @param document
*/
private void buildBeanObject(Document document)
throws Exception{
Element root=document.getDocumentElement();
NodeList beans=root.getElementsByTagName("bean");
for(int i=0;i<beans.getLength();i++) {
Element bean=(Element)beans.item(i);
String id=bean.getAttribute("id");
String className=bean.getAttribute("class");
map.put(id, Class.forName(className).newInstance());
}
}
private void buildBeanObjectRelation(Document document)
throws Exception{
Element root=document.getDocumentElement();
NodeList beans=root.getElementsByTagName("bean");
BeanWrapper wrapper=null;
for(int i=0;i<beans.getLength();i++) {
Element bean=(Element)beans.item(i);
String id=bean.getAttribute("id");
Object o=map.get(id);
NodeList properties=bean.getElementsByTagName("property");
for(int j=0;j<properties.getLength();j++) {
Element property=(Element)properties.item(j);
String name=property.getAttribute("name");
String value=property.getAttribute("value");
wrapper=new BeanWrapper(o);
if(value==null||value.trim().length()==0) {
value=property.getAttribute("ref");
wrapper.setProperty(name, map.get(value));
} else {
try {
wrapper.setProperty(name, Integer.parseInt(value));
}catch(Exception e) {
wrapper.setProperty(name, value);
}
}
}
}
}
public Object getBean(String id) {
return map.get(id);
}
}
class BeanWrapper {
Object o;
Map<String, Method> map=
new HashMap<String,Method>();
public BeanWrapper(Object o) {
this.o=o;
}
public void setProperty(String name,Object value) throws Exception{
String methodName="set"+name.toUpperCase().charAt(0)+name.substring(1);
array2Map(o.getClass().getMethods());
Method m=map.get(methodName);
//Method m=o.getClass().getMethod(methodName, value.getClass());
m.invoke(o, value);
}
private void array2Map(Method[] ma) {
for(int i=0;i<ma.length;i++) {
map.put(ma[i].getName(),ma[i]);
}
}
}
分享到:
相关推荐
BeanFactory是Spring的核心组件之一,它是容器的基石,负责管理应用中的对象,实现依赖注入。这篇文章将深入探讨BeanFactory的工作原理及其相关知识点。 一、BeanFactory的定义 BeanFactory是一个接口,它定义了...
然而,BeanFactory缺乏一些高级功能,如国际化支持(i18n)、事件传播、AOP代理以及对Spring的其他核心模块如MessageSource、ApplicationEvent等的集成。因此,对于大型复杂的应用,BeanFactory可能显得不够用。 ...
本文将通过模拟Spring的`BeanFactory`来深入理解其工作原理,帮助开发者更好地掌握Spring的核心概念。 `BeanFactory`是Spring框架中最基础的bean管理容器,它是所有更高级别的容器(如`ApplicationContext`)的基类...
Spring的Bean容器(ApplicationContext或BeanFactory)负责管理所有Bean的生命周期。它根据配置文件或注解来实例化、配置、装配以及管理Bean。Bean的定义可以通过XML、Java配置类或者基于注解的方式进行。 3. **...
BeanFactory 是 Spring 框架中的一个核心接口,用于管理应用程序中的对象(也称为 bean)。它提供了一种将应用程序组件(如服务、数据源、控制器等)解耦并配置到应用程序中的方式。 总的来说,可以初步理解...
Spring框架是Java开发中的核心组件,它为构建可维护、模块化、松耦合的应用提供了全面的解决方案。Spring的核心技术主要包括依赖注入(Dependency Injection,DI)、面向切面编程(Aspect-Oriented Programming,AOP...
#### 四、Spring的核心组件——BeanFactory与ApplicationContext 1. **BeanFactory**:它是Spring框架中最基本的容器接口,负责创建和管理Bean实例。BeanFactory通过工厂模式为应用程序提供服务,允许应用程序请求...
在Spring框架中,IOC(Inversion of Control,控制反转)是其核心概念之一,它改变了传统应用程序中的对象创建和管理方式。本学习资料主要聚焦于Spring的IOC容器,特别是从最基本的BeanFactory开始,逐步深入理解...
在 Spring 框架中,BeanFactory 是一个核心组件,负责管理和实例化 Bean。Spring 3 中提供了三种实例化 BeanFactory 的方法,下面将详细介绍这三种方法。 第一种方法:从文件系统资源实例化 BeanFactory 在 Spring...
在源代码中,`org.springframework.beans.factory.BeanFactory` 和 `org.springframework.context.ApplicationContext` 是IoC容器的两个主要接口,它们提供了加载配置、获取Bean和处理依赖注入等功能。通过阅读这些...
这个压缩包包含的是Spring框架的IOC(Inversion of Control)核心组件的jar包,是理解和使用Spring进行应用程序开发的基础。 **IOC容器** IOC,或称DI,是Spring的核心特性,它使得开发者可以将对象的创建和管理...
本文主要探讨了Spring的核心API,包括BeanFactory、BeanDefinition以及事务管理等关键组件,旨在帮助开发者深入理解Spring的工作机制,从而编写出更高效、更可维护的Java应用。 首先,BeanFactory是Spring框架的...
《Spring核心》是Java开发领域中的重要学习资源,尤其对于参加达内IT培训的学员而言,这份内部资料具有极高的价值。Spring框架是Java企业级应用开发的基石,它的核心特性包括依赖注入(Dependency Injection,DI)、...
BeanFactory是Spring IoC容器的核心接口,它定义了getBean()、containsBean()等管理Bean的通用方法。BeanFactory是一个工厂的顶层规范,它提供了Bean的实例化、管理和依赖注入等功能。BeanFactory的实现类有...
在Spring框架中,BeanFactory和ApplicationContext是两种不同的bean容器,它们各自有其特性和应用场景,理解二者的区别对于深入掌握Spring框架至关重要。 首先,BeanFactory是Spring中最基本的bean容器,它提供了对...
综上所述,文档内容十分丰富,通过一个详细的实战案例——编写精简版Spring框架,逐步解析了Spring框架核心部分的设计与实现。对每个关键步骤都进行了深入讲解,详细描述了各组件的功能和相互间的关系。阅读和理解这...
Spring的BeanFactory的接口的中文解释
它包含BeanFactory接口,是Spring容器的基础,支持XML、注解等多种方式进行bean的配置。 3. **log4j-1.2.16.jar**:这是一个日志记录库,广泛用于Java应用程序,提供灵活的日志记录控制。Spring框架通常会结合日志...
《1000行代码读懂Spring核心》这篇文章以作者黄亿华的个人经验,通过学习一个简化的Spring框架的实现——tiny-spring项目,来深入理解Spring核心的概念和技术实现。tiny-spring是一个开源项目,旨在通过逐步构建一个...
Spring框架是Java开发中的一个核心库,主要用于管理对象(通常称为bean)的生命周期和依赖关系。在本篇文章中,我们将深入探讨Spring的核心容器及其bean的概念,以帮助你更好地理解和使用这个强大的工具。 **Spring...