xm+dom4j+javaReflect实现sping的一个简单模拟
Bean.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="hello" class="com.ynxinhua.bean.Hello">
<property name="message" value="我的第一个Spring2.5程序!"/>
</bean>
<bean id="student" class="com.ynxinhua.bean.Student">
<property name="name" value="张三"/>
<property name="age" value="20"/>
<property name="sex" value="男"/>
</bean>
</beans>
Hello.java
package com.ynxinhua.bean;
public class Hello {
private String message;
public void setMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
Student.java
package com.ynxinhua.bean;
public class Student {
private String name;
private int age;
private String sex;
public Student() {
}
public Student(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
ApplicationContext.java
package com.ynxinhua.spring;
public interface ApplicationContext {
public Object getbean(String beanId);//根据配置的id属性获取一个bean实例
}
ClassPathXmlApplicationContext.java
package com.ynxinhua.spring;
import java.lang.reflect.Method;
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.io.SAXReader;
public class ClassPathXmlApplicationContext implements ApplicationContext {
private Map beans = new HashMap();
public ClassPathXmlApplicationContext(String filepath) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read("bin/" + filepath);// 构建dom4j树
Element root = document.getRootElement();// 获取根元素
List<Element> list = root.elements("bean");// 获取所有bean元素
for (Element e : list) {
String beanid = e.attributeValue("id");// 获取id的属性值
String className = e.attributeValue("class");// 获取class的属性值
Class class1 = Class.forName(className);
Object beanObject = class1.newInstance();// 实例化bean对象
beans.put(beanid, beanObject);// 放入beans中
List<Element> list2 = e.elements("property");
for (Element e1 : list2) {
String name = e1.attributeValue("name");
String value = e1.attributeValue("value");
// System.out.println(class1.getDeclaredField("name").getType().getName());
String parameterType = class1.getDeclaredField(name).getType().getName();// 获得属性的参数类型
String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1);
Method method = null;
if (parameterType.equals("int")) {
method = class1.getMethod(methodName, int.class);
}
else{
method = class1.getMethod(methodName, Class.forName(parameterType));
}
if (parameterType.equals("int")) {
method.invoke(beanObject, Integer.parseInt(value));
}
else{
method.invoke(beanObject, value);
}
}
}
}
public Map getBeans() {
return beans;
}
public void setBeans(Map beans) {
this.beans = beans;
}
@Override
public Object getbean(String beanId) {
return beans.get(beanId);
}
}
Demo.java
package com.ynxinhua.demo;
import com.ynxinhua.bean.Hello;
import com.ynxinhua.bean.Student;
import com.ynxinhua.spring.ApplicationContext;
import com.ynxinhua.spring.ClassPathXmlApplicationContext;
public class Demo {
public static void main(String[] args) throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
Hello hello=(Hello) context.getbean("hello");
System.out.println(hello.getMessage());
Student student=(Student) context.getbean("student");
System.out.println(student.getName());
System.out.println(student.getAge());
System.out.println(student.getSex());
}
}
例子源码见附件.导入myeclipse运行的时候需要dom4j的jar包
分享到:
相关推荐
spring-webmvc-5.0.8.RELEASE.jar
Spring 框架是Java开发中的一个核心框架,它提供了全面的编程和配置模型,旨在简化企业级应用的开发。Spring 5.3.3 是该框架的一个版本,它的发布通常意味着对之前版本的改进、错误修复以及可能的新功能添加。在...
Spring Framework,作为Java领域最广泛应用的轻量级框架之一,自诞生以来就以其卓越的灵活性、强大的功能和良好的社区支持,深受广大开发者的喜爱。本次我们将深入探讨Spring Framework的最新版本5.3.20,揭示其在...
Spring Tool Suite (STS) 是一个基于Eclipse的集成开发环境(IDE),专为Spring框架的开发而设计。这个版本,3.8.4.RELEASE,是针对Eclipse 4.6.3(Neon)定制的,并且适用于Windows 32位和64位系统。在"sts-bundle....
赠送jar包:spring-oxm-5.3.10.jar; 赠送原API文档:spring-oxm-5.3.10-javadoc.jar; 赠送源代码:spring-oxm-5.3.10-sources.jar; 赠送Maven依赖信息文件:spring-oxm-5.3.10.pom; 包含翻译后的API文档:spring...
spring-webmvc.jar 各个版本,免费下载 spring-webmvc-RELEASE.jar 各个版本,免费下载 如果不能免费下载,关注我,评论区联系我索要!
spring-webmvc-3.2.3.RELEASE.jar
spring-instrument-tomcat-4.0.0.RELEASE-sources.jar
### 整合SSM框架详解:从MyBatis到Spring-MyBatis再到...在整个过程中,我们从简单的MyBatis开始,逐步引入Spring和Spring MVC,实现了对数据库的操作、业务逻辑处理以及Web请求的响应,形成了一个完整的Web应用架构。
springframework 是sping 里面的一个开源框架,主要用户javaee的企业开发。Spring是什么呢?首先它是一个开源的项目,而且非常活跃;它是一个基于IOC和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须...
spring框架jar包 "This product includes software developed by the Spring Framework Project (http://www.springframework.org).
本文将详尽探讨"intellij-spring-assistant-1.0.1.7z"这一压缩包文件中的Spring Assistant 1.0.1版本,旨在帮助开发者更好地理解和利用这一高效工具。 首先,让我们了解Spring Assistant的核心功能。此插件是专为...
尚硅谷Spring6的笔记
sping3 spring-beans 类图 chm
Sping集成Redis最新的spring-data-redis.jar
Feign是SpringCloud中的一个声明式Web服务客户端,它使得编写Web服务客户端变得非常简单。开发者可以通过定义接口,然后由Feign自动生成实现,从而实现服务间的调用。Feign的使用降低了客户端和服务之间交互的复杂性...
- **Spring Tool Suite**:一款由Spring官方推荐的强大Eclipse插件,它为开发者提供了全面的支持工具,尤其是在处理Spring Bean定义文件方面。该插件能够帮助用户验证Bean定义文件,并以直观的方式展现Bean之间的...
这篇“Spring学习笔记(2)----实例化Bean的三种方式”着重讲解了如何在Spring应用上下文中初始化Bean。以下是这三种方式的详细说明: 1. **XML配置方式** 在早期的Spring版本中,XML配置是最常见的实例化Bean的...
包括Spring Boot开发Web应用、Sping Boot的Docker部署、Dubbo微服务实践等。 示例代码 spring-boot-jpa-thymeleaf-crud Spring Boot+JPA+Thymeleaf实现增删改查示例 spring-boot-mybatis-thymeleaf-crud Spring ...