`
java6
  • 浏览: 15619 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

spring学习笔记(一)-----sping的简单模拟

阅读更多

   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包

 

 

0
1
分享到:
评论

相关推荐

    spring-webmvc-5.0.8.RELEASE.jar

    spring-webmvc-5.0.8.RELEASE.jar

    spring-5.3.3-dist.zip

    Spring 框架是Java开发中的一个核心框架,它提供了全面的编程和配置模型,旨在简化企业级应用的开发。Spring 5.3.3 是该框架的一个版本,它的发布通常意味着对之前版本的改进、错误修复以及可能的新功能添加。在...

    spring-tool-suite-3.8.4.RELEASE-e4.6.3-win32-x86_64_sts-bundle.zip

    Spring Tool Suite (STS) 是一个基于Eclipse的集成开发环境(IDE),专为Spring框架的开发而设计。这个版本,3.8.4.RELEASE,是针对Eclipse 4.6.3(Neon)定制的,并且适用于Windows 32位和64位系统。在"sts-bundle....

    spring-framework-5.3.20

    Spring Framework,作为Java领域最广泛应用的轻量级框架之一,自诞生以来就以其卓越的灵活性、强大的功能和良好的社区支持,深受广大开发者的喜爱。本次我们将深入探讨Spring Framework的最新版本5.3.20,揭示其在...

    spring-oxm-5.3.10-API文档-中文版.zip

    赠送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-5.3.3.jar

    spring-webmvc.jar 各个版本,免费下载 spring-webmvc-RELEASE.jar 各个版本,免费下载 如果不能免费下载,关注我,评论区联系我索要!

    spring-webmvc-3.2.3.RELEASE.jar

    spring-webmvc-3.2.3.RELEASE.jar

    spring-instrument-tomcat-4.0.0.RELEASE-sources.jar

    spring-instrument-tomcat-4.0.0.RELEASE-sources.jar

    官方源码 spring-framework-5.3.0.zip

    Spring Framework 是Java开发中不可或缺的一个核心框架,它为构建高质量、可维护、面向服务的Java应用程序提供了全面的基础设施。5.3.0版本作为Spring Framework的重要更新,引入了许多新特性和改进,以适应不断变化...

    [新手-图文]整合ssm框架-从mybatis到spring-mybatis再到ssm-sping-mybatis-spingmvc

    ### 整合SSM框架详解:从MyBatis到Spring-MyBatis再到...在整个过程中,我们从简单的MyBatis开始,逐步引入Spring和Spring MVC,实现了对数据库的操作、业务逻辑处理以及Web请求的响应,形成了一个完整的Web应用架构。

    spring-framework-2.5.5-with-dependencies.zip

    spring框架jar包 "This product includes software developed by the Spring Framework Project (http://www.springframework.org).

    尚硅谷Spring6的笔记

    尚硅谷Spring6的笔记

    intellij-spring-assistant-1.0.1.7z

    本文将详尽探讨"intellij-spring-assistant-1.0.1.7z"这一压缩包文件中的Spring Assistant 1.0.1版本,旨在帮助开发者更好地理解和利用这一高效工具。 首先,让我们了解Spring Assistant的核心功能。此插件是专为...

    sping3 spring-beans 类图 chm

    sping3 spring-beans 类图 chm

    spring-data-redis-1.3.4.jar

    Sping集成Redis最新的spring-data-redis.jar

    Sping开发所用到的包

    mysql-connector-java-5.1.34-bin.jar ...spring-aop-3.2.12.RELEASE.jar spring-aspects-3.2.12.RELEASE.jar spring-beans-3.2.12.RELEASE.jar spring-context-3.2.12....spring-webmvc-portlet-3.2.12.RELEASE.jar

    springcloud-eureka-feign-mybatis-seata.zip

    Feign是SpringCloud中的一个声明式Web服务客户端,它使得编写Web服务客户端变得非常简单。开发者可以通过定义接口,然后由Feign自动生成实现,从而实现服务间的调用。Feign的使用降低了客户端和服务之间交互的复杂性...

    牛人的spring学习笔记,非常适合初学者

    ### 牛人的Spring学习笔记,非常适合初学者 #### 第一课:面向抽象编程 面向抽象编程是一种编程思想,强调在程序设计过程中通过定义抽象层来分离业务逻辑与具体实现细节。这种方式有助于提高软件的可维护性和扩展...

    Sping学习笔记(2)----实例化Bean的三种方式

    这篇“Spring学习笔记(2)----实例化Bean的三种方式”着重讲解了如何在Spring应用上下文中初始化Bean。以下是这三种方式的详细说明: 1. **XML配置方式** 在早期的Spring版本中,XML配置是最常见的实例化Bean的...

    Spring Boot应用开发框架 v2.6.14.zip

    1. **起步依赖(Starters)**:Spring Boot通过提供一系列的起步依赖,使得添加常用功能如数据访问、Web服务、安全等变得非常简单。只需要在项目中引入对应的Maven或Gradle依赖,即可自动配置所需的Bean。 2. **...

Global site tag (gtag.js) - Google Analytics