Spring控制反转的思想
核心:在service业务层调用Dao层的实现方法时,往往我们需要在业务层进行操作,改变调用的实现类。但通过控制反转,在service层中引入set方法,可以实现在用户层面灵活调用。即将控制权由业务层转交给了用户层
如下:
通过setUserDao,在用户层进行灵魂调用
完整代码
DAO层
public interface UserDao {
void getUser();
}
编写了两个实现类
DaoImpl
public class UserDaoImpl implements UserDao {
public void getUser() {
System.out.println("默认获取用户数据");
}
}
DaoSqlImpl
public class UserDaoMySqlImpl implements UserDao {
public void getUser() {
System.out.println("MySql获取用户数据");
}
}
service层
public interface UserService {
void getUser();
}
serviceImpl
public class UserServiceImpl implements UserService {
private UserDao userDao;
//通过set设置反转对象,使用权交给用户层面,用户只需要改变userDao变量,实现不同的调用
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void getUser() {
userDao.getUser();
}
}
用户层调用
public class MyTest {
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl();
userService.setUserDao(new UserDaoMySqlImpl());
userService.getUser();
}
}