简单模拟 Spring 的 ioc
来源:互联网 发布:淘宝的收货地址怎么删 编辑:程序博客网 时间:2024/05/17 08:58
beans.xml
<?xml version="1.0" encoding="UTF-8"?><beans><bean id="userDao" class="com.test.dao.impl.UserDaoImpl" /><bean id="userService" class="com.test.service.UserService"><property name="userDao" bean="userDao" /></bean></beans>
UserDao
package com.test.dao;import com.test.entity.User;public interface UserDao {public void save(User u);}
UserDaoImpl
package com.test.dao.impl;import com.test.dao.UserDao;import com.test.entity.User;public class UserDaoImpl implements UserDao {public void save(User u) {System.out.println("save a user !");}}
User
package com.test.entity;public class User {private int uid;private String uname;public int getUid() {return uid;}public void setUid(int uid) {this.uid = uid;}public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}}
UserService
package com.test.service;import com.test.dao.UserDao;import com.test.entity.User;public class UserService {private UserDao userDao;public UserDao getUserDao() {return userDao;}public void setUserDao(UserDao userDao) {this.userDao = userDao;}public void save(User u) {userDao.save(u);}}
BeanFactory
package myspring;public interface BeanFactory {public Object getBean(String bean);}
ClassPathXmlApplicationContext
package myspring;import java.io.IOException;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.jdom.Document;import org.jdom.Element;import org.jdom.JDOMException;import org.jdom.input.SAXBuilder;public class ClassPathXmlApplicationContext implements BeanFactory {private Map<String, Object> beans = new HashMap<String, Object>();@SuppressWarnings("unchecked")public ClassPathXmlApplicationContext () throws JDOMException, IOException, InstantiationException, IllegalAccessException, ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {SAXBuilder sax = new SAXBuilder();Document doc = sax.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml"));Element element = doc.getRootElement();List<Element> list = element.getChildren("bean");Element e = null;for (int i = 0; i < list.size(); i++) {e = list.get(i);String id = e.getAttributeValue("id");String clazz = e.getAttributeValue("class");Object o = Class.forName(clazz).newInstance();beans.put(id, o);for (Element propElement : (List<Element>)e.getChildren("property")) {String name = propElement.getAttributeValue("name");String bean = propElement.getAttributeValue("bean");System.out.println(name + " " + bean);Object beanObject = beans.get(bean);String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1); System.out.println(methodName);Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]);m.invoke(o, beanObject);}}}public Object getBean(String bean) {return this.beans.get(bean);}}
UserServiceTest(JUnit)
package com.test.service;import static org.junit.Assert.*;import java.io.IOException;import java.lang.reflect.InvocationTargetException;import myspring.BeanFactory;import myspring.ClassPathXmlApplicationContext;import org.jdom.JDOMException;import org.junit.Test;import com.test.dao.UserDao;import com.test.entity.User;public class UserServiceTest {@Testpublic void testSave() {BeanFactory cpxac = null;try {cpxac = new ClassPathXmlApplicationContext();} catch (JDOMException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}UserService uService = (UserService)cpxac.getBean("userService");//UserDao userDao = (UserDao)cpxac.getBean("userDao");//uService.setUserdao(userDao);User u = new User();uService.save(u);}}
到此结束
阅读全文
0 0
- 简单模拟 Spring 的 ioc
- spring 简单模拟 ioc
- 简单代码 模拟 spring的IOC机制
- 简单模拟Spring IOC功能
- 模拟spring的IOC
- 模拟Spring的Ioc
- 模拟spring - 简单实现spring IOC
- Spring IoC的模拟实现
- 自己动手模拟spring的IOC
- Spring的IOC简单实例
- 简单的spring ioc例子
- spring ioc的简单实现
- Spring笔记(第一弹:简单模拟Spring IOC)
- spring的IOC和aop模拟
- javaSE 模拟Spring框架的Ioc
- 模拟spring,写自己的IOC
- 模拟Spring IOC的简易实现
- 利用反射简单模拟Spring的控制反转(Ioc)和依赖注入(DI)
- Java常用库总结(程序更新)
- 锦江国际的一道面试题(很简单)
- EXCEL vba在哪里填加控件,控件的事件在哪里,打开页面就赋值
- 基于R-CNN的物体检测(详细版)
- 38、C#:app.config详述
- 简单模拟 Spring 的 ioc
- myeclipse 装 javadoc
- php sftp上传下载
- prototype提交form的一个例子
- 最长上升非降子序列的长度动态规划
- jstl中的varStatus
- linux 再次获取 dhcp ip地址
- 在Sublime Text 3中配置Python3的开发环境/Build System
- 使用shell脚本监控服务器内存和cpu使用量,自动清理无效内存(补充篇)