网上随手可以查到各种IOC,DI的概念和讨论。这种概念对新手而言一向难以理解,在慕课网,极客学院这一讲spring入门评论区一片嘘声。
但如果能在学习前了解一下模拟实现的spring,想必很多概念性的东西也就能逐步理解。
以下代码参考于马士兵老师的教学视频。
一个简单的java project (不采用spring和spring的思想。)
首先,我们开始一个简单的java project。需求是实现一个用户账号密码插入数据库。
- 新建一个User类,其中有账号密码属性,并generate get,set方法。
package com.fangkehang.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;
}
}
- 其次我们新建一个service层,来进行相应的添加用户的操作
package com.fangkehang.service;
import com.fangkehang.dao.UserDAO;
import com.fangkehang.dao.impl.UserDAOImpl;
import com.fangkehang.model.User;
public class UserService {
public void add(User u){
//这里再调用数据库来实现一下用户 insert.
}
}
- 为了更好的解耦合,我们把数据层和service层再分开。新建一个UserDAO的类来实现数据库的操作。
package com.fangkehang.dao;
import com.fangkehang.model.User;
public class UserDAO {
public void save(User u){
//这里再调用数据库来实现一下用户 insert.
System.out.println("a user saved!");//方便起见,我们用输出来代替数据库操作。
}
}
在UserSevice中
package com.fangkehang.service;
import com.fangkehang.dao.UserDAO;
import com.fangkehang.dao.impl.UserDAOImpl;
import com.fangkehang.model.User;
public class UserService {
private UserDAO userDAO = new UserDAO();
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public void add(User u){
this.userDAO.save(u);
}
}
- OK,到这一步之后,请你仔细思考一下以上代码还有什么可以改进的地方。————— 当使用的数据库不止一个,或者说数据库做变动时,以上的UserDAO的代码需要大范围的改动。所以我们改进一下代码,采用面向接口的方式来编程。
把