zoukankan      html  css  js  c++  java
  • [Java] Spring 3.0 01/02/03/04/05 -自设源代码

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







  • 相关阅读:
    微信外包就找北京动点飞扬软件(长年承接开发微信服务号,订阅号)
    北京动点飞扬软件招募【Android全职工程师】
    win8外包公司——技术分享:参数传递
    微软官方的Windowsphone社区
    Windowsphone8外包团队——wp8控件学习资源整理
    Android外包团队——Jquery乱码解决方案
    Flex外包公司——Flex案例展示
    Flex外包公司——案例汇总
    FLEX外包团队:Flex例子DEMO源码
    flex外包团队—北京动点软件:推荐一本不错的Flex书籍
  • 原文地址:https://www.cnblogs.com/robbychan/p/3786839.html
Copyright © 2011-2022 走看看