用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

模拟简单的SpringIOC

2014-10-29 作者: java举报

[java]代码库

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;
	}
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...