01_2_模拟spring装载bean

1. xml配置文件内容

beans.xml

<beans>

<bean id="u" class="com.wysj.dao.impl.UserDAOImpl"></bean>

<bean id="userService" class="com.wysj.service.UserService">

<property name="userDAO" bean="u"></property> 

</bean>

</beans>

2. 实体类

User.java

package com.wysj.model;

public class User {

private String username;

private String password;

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

}

3. dao及其实现

UserDAO.java

package com.wysj.dao;

import com.wysj.model.User;

public interface UserDAO {

public void save(User u);

}

UserDAOImpl.java

package com.wysj.dao.impl;

import com.wysj.dao.UserDAO;

import com.wysj.model.User;

public class UserDAOImpl implements UserDAO{

@Override

public void save(User u) {

System.out.println("user saved!");

}

}

4. 业务逻辑类

UserService.java

package com.wysj.service;

import com.wysj.dao.UserDAO;

import com.wysj.dao.impl.UserDAOImpl;

import com.wysj.model.User;

public class UserService {

private UserDAO userDAO;

public void add(User u) {

this.userDAO.save(u);

}

public UserDAO getUserDAO() {

return userDAO;

}

public void setUserDAO(UserDAO userDAO) {

this.userDAO = userDAO;

}

}

5. spring读取bean工厂及其实现类

BeanFactory.java

package com.wysj.spring;

public interface BeanFactory {

public Object getBean(String  name);

}

ClassPathXmlApplicationContext.java

package com.wysj.spring;

import java.lang.reflect.Method;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.jdom.Document;

import org.jdom.Element;

import org.jdom.input.SAXBuilder;

public class ClassPathXmlApplicationContext implements BeanFactory{

private static final int Element = 0;

private Map<String, Object> beans = new HashMap<String, Object>();

@Override

public Object getBean(String name) {

// TODO Auto-generated method stub

return beans.get(name);

}

public ClassPathXmlApplicationContext() throws Exception {

SAXBuilder sb = new SAXBuilder();

Document doc = sb.build(ClassPathXmlApplicationContext.class.getClassLoader().getResourceAsStream("beans.xml"));

Element root = doc.getRootElement();

List list = root.getChildren("bean");

for (int i = 0; i < list.size(); i++) {

Element e = (Element) list.get(i);

String id = e.getAttributeValue("id");

String clazz = e.getAttributeValue("class");

System.out.println(id + ":" + clazz);

Object o = Class.forName(clazz).newInstance();

beans.put(id, o);

for(Element propertyElement : (List<Element>)e.getChildren("property")) {

String name = propertyElement.getAttributeValue("name");//userDAO

String bean = propertyElement.getAttributeValue("bean"); //u

Object beanObject = beans.get(bean);

String methodName = "set" + name.substring(0, 1).toUpperCase()+name.substring(1);

System.out.println("method name = " + methodName);

Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]);//setUserDAO

m.invoke(o, beanObject);

}

}

}

}

最新文章

  1. STM32的入侵检测是干什么用的
  2. powershell玩转SQL SERVER所有版本
  3. HDP 2.3 Notes
  4. 互联网商业模式O2O、C2C、B2B、B2C等介绍
  5. hdu 3472 HS BDC(混合路的欧拉路径)
  6. 过滤掉combobox里名称相同的选项
  7. VBS创建数据库
  8. 自定义input file 属性
  9. WinForm实现最小化窗体时隐藏到系统托盘中
  10. Punycode与中文互转
  11. Mac双系统切换
  12. mysql 数据库备份ubuntu
  13. Linux CentOS 安装MySql以及搭建MySql主从复制
  14. iOS NFC
  15. java 的基本数据类型及转换
  16. [Swift]LeetCode26. 删除排序数组中的重复项 | Remove Duplicates from Sorted Array
  17. mysql select in 怎么优化
  18. bootstrap滚动监视原理实现
  19. ES6.0简单了解
  20. linux下如何查看多核负载情况【转】

热门文章

  1. 洛谷P1439 排列LCS问题
  2. maven工程运行出Unable to compile class for JSP: 错误
  3. PJzhang:搜索引擎高级语法与渗透测试
  4. Windows快捷键应用
  5. 获取jar包当前的路径
  6. MySQL 实现字符串换行
  7. IDEA2017 配置Maven
  8. AJPFX浅析Java内存结构
  9. fastjson格式化输出内容
  10. 字符串在forEach方法里面可以使用include函数