Java Spring 学习笔记 003(IOC理论推导)
来自B站【狂神说Java】Spring5最新完整教程IDEA版通俗易懂
一、传统开发业务的实现方式
- UserDao 接口
package com.kuang.dao;
public interface UserDao {
void getUser();
}
- UserDaoImpl 实现类
package com.kuang.dao;
public class UserDaoImpl implements UserDao {
@Override
public void getUser() {
System.out.println("默认获取用户的数据!");
}
}
package com.kuang.dao;
public class UserDaoMysqlImpl implements UserDao {
@Override
public void getUser() {
System.out.println("Mysql获取用户数据!");
}
}
package com.kuang.dao;
public class UserDaoOracleImpl implements UserDao {
@Override
public void getUser() {
System.out.println("Oracle获取用户数据!");
}
}
package com.kuang.dao;
public class UserDaoSqlserverImpl implements UserDao {
@Override
public void getUser() {
System.out.println("Sqlserver获取用户数据!");
}
}
- UserService 业务接口
package com.kuang.service;
public interface UserService {
void getUser();
}
- UserServiceImpl 业务实现类
package com.kuang.service;
import com.kuang.dao.UserDao;
import com.kuang.dao.UserDaoImpl;
public class UserServiceImpl implements UserService {
// 当需要改成不同的实现时,需要修改这一块的代码
private UserDao userDao = new UserDaoImpl();
@Override
public void getUser() {
userDao.getUser();
}
}
- 客户调用类
import com.kuang.service.UserService;
import com.kuang.service.UserServiceImpl;
public class MyTest {
public static void main(String[] args) {
// 用户实际调用的是业务层,DAO层他们不需要接触
UserService userService = new UserServiceImpl();
userService.getUser();
}
}
在我们之前的业务中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求去修改原代码!如果程序代码量十分大,修改一次的成本代价十分昂贵!
我们使用一个Set接口实现,已经发生了革命性的变化!客户调用的时候自己通过set方法注入不同的DAO层实现类,不用调整自己是Service层代码。
package com.kuang.service;
import com.kuang.dao.UserDao;
public class UserServiceImpl implements UserService {
private UserDao userDao;
// 利用set进行动态实现值的注入!
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void getUser() {
userDao.getUser();
}
}
import com.kuang.dao.UserDaoMysqlImpl;
import com.kuang.service.UserService;
import com.kuang.service.UserServiceImpl;
public class MyTest {
public static void main(String[] args) {
// 用户实际调用的是业务层,DAO层他们不需要接触
UserService userService = new UserServiceImpl();
((UserServiceImpl) userService).setUserDao(new UserDaoMysqlImpl());
userService.getUser();
}
}
- 之前,程序是主动创建对象!控制权在程序员手上!
- 使用了set注入后,程序不再具有主动性,而是变成了被动的接收对象!
这种思想,从本质上解决了问题,我们程序员不用再去管理对象的创建了。系统的耦合性大大降低,可以更加专注在业务的实现上!这是IOC的原型!
浙公网安备 33010602011771号