zoukankan      html  css  js  c++  java
  • 01_2_模拟spring装载bean

    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);
    
    }
    
    }
    
    }
    
    }
    
  • 相关阅读:
    SQL删除重复记录
    C#分页插件 Webdiyer
    B/S系统操作日志设计思路
    VS2010自动添加版权信息以及更改默认的jquery库
    Gridview中添加CheckBox全选
    利用log4net记录操作日志
    如何在定义游标的时候使用动态sql语句
    java 获取指定月份第一天和最后一天
    java 判断星期几
    SSH登陆错误"WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! "
  • 原文地址:https://www.cnblogs.com/flyback/p/8784186.html
Copyright © 2011-2022 走看看