[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
- [Java] Spring 3.0 01/02/03/04/05 -自设源代码
- Spring设值注入
- Spring设值注入
- Spring 设值注入
- Java开源笔记:Spring源代码解析
- Spring:新时代的Java源代码
- Eclipse中如何查看Java自带函数的源代码?
- ubuntu下使用自带的openJDK查看java源代码
- Spring源代码
- “设为桌面图标”的ASP源代码
- Spring:设值注入用法
- spring注入:设值注入
- Spring之设值注入
- HBase源代码自编译
- 将resin设为自启动_linux
- oracle建表,并设主键自增
- oracle建表,并设主键自增
- linux设开机自启动服务
- C语言运行库简介
- linux安装mongodb
- 计算动态UILable的高度
- Android 中的蓝牙开发库 - 休息10分钟:听说蓝牙4.0马上要火啦?!
- TCP 端口监听队列原理
- [Java] Spring 3.0 01/02/03/04/05 -自设源代码
- Installation Together12 with Eclipse 4.2.2
- 数组作数据成员
- Delphi中的基本控件之TComboBox的使用总结
- openfire 3.8.2 源码部署 /开发配置 / 二次开发
- Android 小知识(慢慢积累)
- thrift
- 高并发系统的开发注意事项
- busybox的init初始化进程