IOC本质
- 全称:Inversion of Control
- 中文翻译:控制反转
- IOC 是一种设计思想 DI(依赖注入)是实现IOC的一种方法
IOC实例
实现一个查询数据库用户的功能
没有使用IOC思想
1:创建查询数据库的接口
public interface UserDao {
public void getUser();
}
2:实现查询数据库的接口
使用mysql的方式进行查询
public class UserDaoMqlImpl implements UserDao{
public void getUser() {
System.out.println("Mysql获取用户数据");
}
}
3:创建service层 的接口
public class UserDaoMqlImpl implements UserDao{
public void getUser() {
System.out.println("Mysql获取用户数据");
}
}
4:实现service层的接口
import dao.UserDao;
import dao.UserDaoMqlImpl;
public class UserServiceImpl implements UserService {
UserDao userdao=new UserDaoMqlImpl();//实现Mysql的方式查询数据库
public void getUser() {
userdao.getUser();
}
}
5:测试
import service.UserServiceImpl;
public class MyTest {
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl();
userService.getUser();
}
}
问:现在别的用户想使用Oracle来查询数据库?
在实现一个查询数据库的类(),并且修改service层的代码.
以后每当用户想使用别的方式访问数据库时 ,就要重复上述内容
这时候不使用IOC的缺点就显示出来了,每次都要修改service层的源码 很不安全.
使用IOC思想
1:创建查询数据库的接口
public interface UserDao {
public void getUser();
}
2:实现查询数据库的接口
使用mysql的方式进行查询
public class UserDaoMqlImpl implements UserDao{
public void getUser() {
System.out.println("Mysql获取用户数据");
}
}
3:创建service层 的接口
public class UserDaoMqlImpl implements UserDao{
public void getUser() {
System.out.println("Mysql获取用户数据");
}
}
4:实现service层的接口
import dao.UserDao;
public class UserServiceImpl implements UserService {
UserDao userdao;
public void setUserdao(UserDao userdao) {
this.userdao = userdao;
}
public void getUser() {
userdao.getUser();
}
}
5:测试
import dao.UserDaoOracleImpl;
import service.UserServiceImpl;
public class MyTest {
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl();
userService.setUserdao(new UserDaoOracleImpl());
userService.getUser();
}
}