`
Lee_Xq_
  • 浏览: 2136 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

模拟简单的SpringIOC

阅读更多

       IOC(Inersion of Control)是Spring框架的基础,BeanFatory是IoC容器的核心借口,其职责是实例化、定位、配置应用程序中的对象与及建立这些对象之间的依赖。

      ApplicationContext接口由BeanFactory派生而来,增强了BeanFactory的功能,提供更多的面向实际应用的方法。大多数情况下,使用ApplicatonContext作为Spring容器。下面模拟SpringIOC:

       这是一个POJO类,Boy.java

 

package POJO;
public class Boy {
private Integer id;
private String name;
private Integer age;
public Boy(){}
//....省略getter跟setter
}

      

         接下来写一个xml文件,spring.xml:

 

<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id ="boy" class="POJO.Boy">
<property name="id" value="1"/>
<property name="name" value="小男孩"/>
<property name="age" value="11"/>
</bean>
</beans>

 

       核心类:SpringIOC

public class SpringIOC {
	private String XMLPath;

	/**
	 * @param XMLPath
	 *            配置文件的路径
	 */
	public SpringIOC(String XMLPath) {
		this.XMLPath = XMLPath;
	}

	public Object getBean(String beanId) throws Throwable {
		// 1.解析配置文件
		Document doc = this.loadXML();
		// 2.根据beanId定位到<bean>标签
		Element beanElement = this.getBeanElement(doc, beanId);
		// 3.获取beanElement的class属性的值
		String classPath = this.getClassPath(beanElement);
		// 4.通过class属性值利用反射技术构造bean实例
		Object obj = this.createObject(classPath);
		// 5.使用beanUtils给对象设置
		obj = this.setObeject(beanElement, obj);

		return obj;
	}

	/**
	 * 加载xml配置文件
	 * 
	 * @return
	 * @throws Throwable
	 */
	private Document loadXML() throws Throwable {
		return new SAXReader().read(new File(XMLPath));
	}

	/**
	 * 根据beanId定位到对应的bean标签
	 * 
	 * @param doc
	 * @param beanId
	 * @return Element
	 */
	private Element getBeanElement(Document doc, String beanId) {
		return (Element) doc.selectSingleNode("//bean[@id='" + beanId + "']");
	}

	/**
	 * 得到beanElement的class属性值
	 * 
	 * @param beanElement
	 * @return
	 */
	private String getClassPath(Element beanElement) {
		return beanElement.attributeValue("class");
	}

	/**
	 * 通过class属性值利用反射技术构造bean实例
	 * 
	 * @param classPath
	 * @return
	 */
	private Object createObject(String classPath) throws Throwable {
		return Class.forName(classPath).newInstance();
	}

	/**
	 * 使用工具类beanUtils给对象设值
	 * 
	 * @param obj
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private Object setObeject(Element beanElement, Object obj) throws Throwable {
		List<Element> list = beanElement.elements();
		for (Element element : list) {
			String name = element.attributeValue("name");
			String value = element.attributeValue("value");
			BeanUtils.setProperty(obj, name, value);
		}
		return obj;
	}
}

 注意:这里用dom4j解析xml,并且使用BeanUtils给对象设置属性,需要导入相应的jar包

 

        测试类 TestSpringIOC.java

public class TestSpringIOC {
	
	public static void main(String[] args) throws Throwable {
		

	SpringIOC ioc = new SpringIOC("src/spring.xml");
	
	Boy boy = (Boy) ioc.getBean("boy");
	
	System.out.println(boy);
	
	}
}

     输出为:Boy [id=1, name=小男孩, age=11],简单的模拟SpringIOC就到此结束了。

   

0
1
分享到:
评论

相关推荐

    spring IOC 简易实现

    NULL 博文链接:https://zhengshuo.iteye.com/blog/573192

    简单模拟springIoc容器

    基于xml注册,简单模拟spring ioc容器。快速理解ioc容器

    模拟spring ioc技术

    简单模拟spring ioc技术,一个小demo,希望对您理解ioc有所帮助.

    基于java简单模拟实现spring_ioc

    基于java简单模拟实现spring_ioc

    Spring IOC AOP MVC 简单例子

    Spring IOC AOP MVC 简单例子

    java 解析xml,模拟spring框架ioc

    模拟spring框架的ioc功能,简单实用的实现,高效。

    模拟Spring的IoC容器实现注解自动装配

    自己实现的简易的模拟Spring的IoC容器,实现注解自动装配

    动手写框架,模拟简易的SpringIOC.rar

    https://blog.csdn.net/qq_43564410/article/details/116142744

    模拟springIOC

    该工程主要是模拟spring中IOC功能,自己模拟实现了简单的依赖注入。导入执行时,只需将文件拷入到自己的工程中即可使用。

    模拟Spring的Ioc功能

    利用jdom2去解析xml文档,然后利用反射机制简单的模拟Ioc功能

    用工厂模拟spring的IOC

    今天将公司的工厂类抽出来进行简单总结,同时加深对工厂类和spring原理的理解。

    SpringIOC-Demo

    SpringDemodemo简单模拟了spring ClasspathXxmlApplicationContext的工作机制,学习了spring是如何实现IOC。控制反转:将某一接口的具体实现类的选择控制权从调用类中移除,转交给第三方决定,即由Spring容器借由bean...

    简单Spring框架模拟器--Demo

    Spring模拟器,有浅入深(共包括10个案例,有简入难),对了解、掌握Spring源码具有绝好的实例。包括IOC、AOP进行模拟

    spring jar 包详解

    如果你的应用仅仅用到简单的Inversion of Control / Dependency Injection(IoC/DI)容器,那么只需spring-core.jar与spring-beans.jar即可;如果你对发布的大小要求很高,那么就得精挑细选了,只取包含自己所需特性...

    Spring的学习笔记

    第三课:模拟Spring功能 5 第四课:搭建sping的运行环境 8 一、 建立一个新的项目 8 二、 建立spring的配置文件 8 三、 引入spring的jar包 8 四、 测试代码: 8 五、 注意接口的使用: 8 第五课:IOC(DI)配置及应用 ...

    最新最全的spring开发包

    spring jar包详细介绍 spring.jar是包含有完整发布的单个jar包,spring....Spring测试套件使用了其中大量mock类,这样测试就更加简单。模拟HttpServletRequest和HttpServletResponse类在Web应用单元测试是很方便的。

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    如果你的应用仅仅用到简单的Inversion of Control / Dependency Injection(IoC/DI)容器,那么只需spring-core.jar与spring-beans.jar即可;如果你对发布的大小要求很高,那么就得精挑细选了,只取包含自己所需特性...

    Spring.NetDemo.rar

    包含spring.net2.0完整类库。资源是一个Spring.net实现IoC操作的简单实例,模拟实现了业务层与表现层解除耦合的过程,源代码可供学习有具体的注释,并套用到具体项目中,源码测试无误可运行。

    Spring.net框架

    在Step3到Step5的例子中,我们将利用Spring.net提供的Ioc框架,轻松完 成解耦以及系统改造等工作。 一、类之间的依赖 我们的第一个例子主要用于说明程序的基本构造,并且作为一个反面典型,引出为什么要解耦,以及...

    ssm学生竞赛模拟系统.zip

    Spring提供了控制反转(IoC)和面向切面(AOP)等特性,简化了开发过程;Spring MVC用于构建Web应用程序,处理HTTP请求和响应;而MyBatis则是一个优秀的持久层框架,简化了数据库操作。 这些项目的开发旨在为用户...

Global site tag (gtag.js) - Google Analytics