一.使用dom4j读取spring 配置文件
package junit.test;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;
public class ZhkClassPathXMLApplicationContext
{
private List<BeanDefinition> beanDefinitions = new ArrayList<BeanDefinition>();
private Map<String,Object> singletones = new HashMap<String,Object>();
public ZhkClassPathXMLApplicationContext(String filename)
{
this.readXML(filename);
this.instanceBeans();
}
//完成bean实例化
private void instanceBeans()
{
for(BeanDefinition beanDefine : beanDefinitions)
{
try
{
if (null != beanDefine.getClassName() && !"".equals(beanDefine.getClassName().trim()))
{
singletones.put(beanDefine.getId(),
Class.forName(beanDefine.getClassName())
.newInstance());
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
/** <读取配置文件>
* @param filename [参数说明]
*/
private void readXML(String filename)
{
SAXReader saxReader = new SAXReader();
Document document = null;
try
{
URL xmlpath = this.getClass()
.getClassLoader()
.getResource(filename);
document = saxReader.read(xmlpath);
Map<String, String> nsMap = new HashMap<String, String>();
nsMap.put("ns", "http://www.springframework.org/schema/beans"); //加入命名空间
XPath xsub = document.createXPath("//ns:beans/ns:bean"); //创建beans/bean查询路径
xsub.setNamespaceURIs(nsMap); //设置命名空间
List<Element> beans = xsub.selectNodes(document); //获取文档下所有bean节点
for (Element element : beans)
{
String id = element.attributeValue("id"); //获取id属性值
String className = element.attributeValue("class"); //获取class属性值
BeanDefinition beanDefine = new BeanDefinition(id,className);
beanDefinitions.add(beanDefine);
}
}
catch (DocumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/** <获取bean实例>
* @param beanName
*/
public Object getBean(String beanName)
{
return this.singletones.get(beanName);
}
}
package junit.test;
public class BeanDefinition
{
private String id;
private String className;
public BeanDefinition(String id, String className)
{
this.id = id;
this.className = className;
}
public String getId()
{
return id;
}
public void setId(String id)
{
this.id = id;
}
public String getClassName()
{
return className;
}
public void setClassName(String className)
{
this.className = className;
}
}
package junit.test;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.spring.service.PersonService;
public class SpringTest
{
@BeforeClass
public static void setUpBeforeClass() throws Exception
{
}
@Test public void instanceSpring()
{
ZhkClassPathXMLApplicationContext ctx = new ZhkClassPathXMLApplicationContext("beans.xml");
PersonService personservice = (PersonService)ctx.getBean("personService");
personservice.save();
}
}
分享到:
相关推荐
《Spring2.5视频教程:编码剖析Spring管理Bean的原理》是由知名教育机构黑马程序员的讲师黎活明主讲的一套教程,旨在深入解析Spring框架2.5版本中Bean的管理机制。本教程通过实际编码演示,帮助学习者理解Spring如何...
这个是搭建与测试Spring的开发环境和编码剖析Spring 管理Bean的原理的代码,适合刚接触spring的人学习,如何搭建spring开发环境,以及了解spring是如何管理bean的。这个是由传智播客的老师讲的。
本篇学习笔记将深入剖析Spring依赖注入的原理,通过源码分析帮助我们理解这一核心机制。 首先,依赖注入允许我们解耦组件之间的关系,使得各个组件可以独立地进行开发、测试和维护。在Spring中,DI主要通过两种方式...
比如,`@Component`家族注解标识一个类作为Spring管理的bean,`@Autowired`自动装配依赖,`@Value`注入值,`@PostConstruct`和`@PreDestroy`分别标记初始化和销毁方法。 3. 配置源: Spring的配置源可以是XML文件...
在容器方面,Spring Framework 5.2.25.RELEASE对Bean生命周期的管理进行了改进,新增了生命周期回调方法,让开发者能更精确地控制Bean的创建和销毁过程。同时,它还增强了对Java EE和Jakarta EE标准的支持,如JMS、...
本文将深入解析Spring中的依赖注入原理,帮助开发者更好地理解和应用这一核心功能。 依赖注入(Dependency Injection,简称DI)是Spring框架的核心之一,它允许组件之间的依赖关系在运行时由外部容器来管理,而不是...
《Spring3.x企业应用开发实战》是一本...通过分析和实践这些源码,读者可以深入理解Spring3.x框架的工作原理,掌握企业级应用开发的关键技能。同时,结合书中的理论知识,可以更好地将理论与实践相结合,提升开发能力。
3. **Bean容器**:Spring的Bean工厂和ApplicationContext是管理对象的核心组件。它们负责实例化、配置、初始化和装配对象,是Spring进行DI的基础。 4. **IoC容器**:IoC(Inversion of Control,控制反转)是DI的另...
### Spring框架的设计原理及设计模式分析 #### 一、Spring框架的核心组件及其作用 Spring框架作为Java企业级应用开发中最受欢迎的开源框架之一,它的设计理念和技术实现方式深受开发者喜爱。Spring框架由多个组件...
3. AOP(面向切面编程):Spring 1.0开始引入AOP,尽管当时功能相对较弱,但已经能够实现简单的切面定义和通知,为日后的事务管理、日志记录等提供了便利。 四、XML配置 XML配置是Spring 1.0中的主要配置方式,...
《深入剖析Spring Framework 5.1.0.RELEASE源码》 Spring Framework是Java开发中的一个核心框架,它为创建可维护、可扩展且松耦合的Java应用程序提供了全面的基础。5.1.0.RELEASE版本是Spring发展的一个重要里程碑...
这个接口主要用于扩展Spring配置,使得我们可以在不编写XML配置或使用`@Configuration`注解类的情况下,根据某些条件动态地注册bean。下面将详细探讨`ImportBeanDefinitionRegistrar`的工作原理、使用场景以及如何...
《Spring技术内幕:深入解析Spring架构与设计原理》是一本深度剖析Spring框架核心概念和技术的专著。本书旨在帮助读者理解Spring的内在运作机制,掌握其设计思想,并能灵活运用到实际开发中。通过深入学习,我们可以...
《Spring3.x企业应用开发实战》...通过分析和运行这些源码,读者能深入理解Spring框架的工作原理,以及如何在实际项目中应用。每个文件夹都可以作为一个独立的学习单元,逐步提升读者在Spring 3.x开发中的技能和经验。
1. **依赖注入**:Spring的核心特性之一,通过DI,对象之间的依赖关系不再硬编码,而是由容器在运行时动态管理和维护。这提高了代码的可测试性和可维护性。 2. **AOP**:Spring的AOP模块允许开发者定义“切面”,...
源码分析是理解Spring工作原理的关键,能帮助开发者深入掌握如何在实际项目中有效地使用和优化Spring。下面将对Spring框架的核心组件、设计理念以及源码中的关键部分进行详细的解释。 1. **依赖注入(DI)** - ...
- Spring的核心特性之一就是依赖注入,它允许对象之间的依赖关系被外部容器管理,而非对象内部硬编码。这样提高了代码的可测试性和可维护性。 3. **Spring MVC**: - Spring MVC是Spring框架的一个模块,用于构建...
本篇文章将深入探讨Spring框架的工作原理和代码分析,帮助你更好地理解和掌握其精髓。 1. **依赖注入(DI)**: - DI是Spring的核心特性,它允许对象之间的依赖关系在运行时通过配置文件或注解来管理,而不是硬...
1. **依赖注入(DI)**:DI是一种设计模式,它允许组件之间的依赖关系在运行时由外部容器(在Spring中是IoC容器)管理,而不是在组件内部硬编码。这样可以降低组件间的耦合度,提高代码的可测试性和可维护性。Spring...
DI是Spring的核心特性之一,允许开发者将对象的依赖关系通过配置文件或注解来管理,而不是硬编码在类内部。这增强了代码的可测试性和可维护性。 3. **面向切面编程(Aspect-Oriented Programming, AOP)** AOP...