本文可作为北京尚学堂 spring课程的学习笔记
为什么要针对接口编程?
不说理论了 直接上一个实例
给数据库里写一个user 很简单的例子
首先
package com.bjsxt.model; public class User { private String name; private String password; //省略get,set方法 }然后我们加一个service 就是业务逻辑曾 包含user应该具有的一些逻辑 例如save delete...
package com.bjsxt.services; import com.bjsxt.dao.UserDao; 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 Save(User u){ userDao.save(u); } }这个userdao是个什么东西?
userservice 主要干的是业务逻辑的事 但是更为具体的业务实现(与数据库相关的)由dao组成
userdao 主要干的是很数据库打交道的事
package com.bjsxt.dao; import com.bjsxt.model.User; public class UserDao { public void save(User u) { // TODO Auto-generated method stub System.out.println("已经写入mysql"); } }问题来了 如果我们本来用的是mysql 现在想换成oracle
把上面的UserDao改成userdaomysql
再加上一个userdaooracle
当然给上面再加要给userdao的接口
如下:
package com.bjsxt.dao; import com.bjsxt.model.User; public class UserDaoMysql implements UserDao { @Override public void save(User u) { // TODO Auto-generated method stub System.out.println("已经写入mysql"); } }
package com.bjsxt.dao; import com.bjsxt.model.User; public interface UserDao { public void save(User u); }那最后的test测试函数就很好写了
package com.bjsxt.test; import com.bjsxt.dao.UserDaoMysql; import com.bjsxt.model.User; import com.bjsxt.services.UserService; public class Test { public static void main(String[] args) { User user=new User(); UserService userService=new UserService(); UserDao dao=new UserDaoMysql(); userService.setUserDao(dao); userService.Save(user); } }
UserDao dao=new UserDaoOracle();