[Java] Spring 3.0 01/02/03/04/05 -自设源代码

来源:互联网 发布:网络电视怎么看电视 编辑:程序博客网 时间:2024/06/08 05:31
UserDAO
package com.bjsxt.dao;import com.bjsxt.model.User;public interface UserDAO { // 和数据库打交道    public void save(User u); // 访问  mysql 的代码}
UserDAOImpl
package com.bjsxt.dao.impl;import com.bjsxt.dao.UserDAO;import com.bjsxt.model.User;public class UserDAOImpl implements UserDAO {    @Override    public void save(User u) {        // TODO Auto-generated method stub        System.out.println("a user saved!");    }    }
User
package com.bjsxt.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;    }}
UserService
package com.bjsxt.service;import com.bjsxt.dao.UserDAO; // 抽象出的数据库管理层 import com.bjsxt.dao.impl.UserDAOImpl;import com.bjsxt.model.User;public class UserService { // 业务逻辑, 还可以设计权限,   抽象出一层 : 用户服务层, 用户管理层    private UserDAO userDAO;    public UserDAO getUserDAO() {        return userDAO;    }    public void setUserDAO(UserDAO userDAO) {        this.userDAO = userDAO;    }    public void add(User u) {        this.userDAO.save(u); // 添加用户会将用户添加到  DB 中。    }}
BeanFactory
package com.bjsxt.spring;public interface BeanFactory {    public Object getBean(String name);}
ClassPathXmlApplicationContext
package com.bjsxt.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 Map<String, Object> beans = new HashMap<String, Object>();    public ClassPathXmlApplicationContext() throws Exception {        SAXBuilder sb = new SAXBuilder();        Document doc = sb.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml")); // 构造文档对象        Element root = doc.getRootElement(); // 获取根元素        List list = root.getChildren("bean");// 取名字为disk的所有元素        for (int i = 0; i < list.size(); i++) {            Element element = (Element) list.get(i);            String id = element.getAttributeValue("id");            String clazz = element.getAttributeValue("class");// 取disk子元素capacity的内容            System.out.println(id + ": " + clazz);            Object o = Class.forName(clazz).newInstance();            beans.put(id, o);                        for (Element propertyElement : (List<Element>)element.getChildren("property")) {                String name = propertyElement.getAttributeValue("name"); // userDAO                String bean = propertyElement.getAttributeValue("bean"); // u                Object beanObject = beans.get(bean); // UserDAOImpl instance                                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]);  //实现接口可能会实现多个,这个是第一个UserDAO, setUserDAO(UserDAO.class)                 // 根据 方法名 与 类 得到   Method                m.invoke(o, beanObject); // 调用  setUserDAO 这个方法将实现这个接口 UserDAO 的类的实例 (也就是UserDAOImpl instance) 这个对象传进去                            }        }    }    @Override    public Object getBean(String name) {        // TODO Auto-generated method stub        return beans.get(name);    }}
beans.xml
<beans>    <bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl"/><bean id="userService" class="com.bjsxt.service.UserService"><property name="userDAO" bean="u"/> <!-- 代表 userService 中有一个 setUserDAO 的方法,也就间接代表 其中有一个 userDAO 成员变量,其值初始化为 id 为 u 的 class。--></bean>        </beans>
UserServiceTest.java
package com.bjsxt.service;import static org.junit.Assert.*;import org.junit.Test;import com.bjsxt.dao.UserDAO;import com.bjsxt.model.User;import com.bjsxt.spring.BeanFactory;import com.bjsxt.spring.ClassPathXmlApplicationContext;public class UserServiceTest {    @Test    public void testAdd() throws Exception {        BeanFactory factory = new ClassPathXmlApplicationContext();        UserService service = (UserService)factory.getBean("userService");  // new UserService();        UserDAO userDAO = (UserDAO) factory.getBean("u");        service.setUserDAO(userDAO);        User u = new User();        service.add(u);    }}







0 0
原创粉丝点击