【SSM-Spring入门】理解反转控制IOC

104 阅读2分钟

辅助理解的程序代码

dao层

1.UserDao

package dao;
 
public interface UserDao {
     void getUser();
}

2.UserDapImpl

package dao;
//UserDao接口的实现类
public class UserDaoImpl implements UserDao{
    public void getUser(){
        System.out.println("默认获取用户数据");
    }
}

3.UserDaoMysqlImpl

package dao;
 
public class UserDaoMysqlImpl implements UserDao{
    @Override
    public void getUser() {
        System.out.println("Mysql获取用户数据");
    }
}

4.UserDaoOracleImpl

package dao;
 
public class UserDaoOracleImpl implements UserDao{
    @Override
    public void getUser() {
        System.out.println("Oracle获取用户数据");
    }
}

service包

1.UserService

package service;
 
public interface UserService {
    void getUser();
}

2.UserServiceImpl

package service;
 
import dao.UserDao;
import dao.UserDaoOracleImpl;
 
public class UserServiceImpl implements UserService{
 
//    private UserDao userDao = new UserDaoOracleImpl();
    private UserDao userDao;
    //利用set就行动态实现值的注入
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
 
    public void getUser(){
        userDao.getUser();
    }
}

test类

import dao.UserDaoOracleImpl;
import service.UserServiceImpl;
 
/*
    再原本的业务中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求趣修改代码
    如果程序代码量十分大,那么修改一次的成本代价十分昂贵。
    我们使用一个set接口实现set注入就是spring反转控制的体现。
    之前,程序是主动创建对象,控制权再程序猿手上,所以每个需求增加都需要程序呀修改
    使用set注入后,程序不再具有主动性,而是变成了被动的接收对象。
    这种思想使得程序员无需趣管理对象的创建了,系统的耦合性大大降低,可以专注于业务的实现。
    这就是IOC的原型
*/
public class test1 {
    public static void main(String[] args) {
        //用户实际调用的是业务层,dao层他们不需要接触
        UserServiceImpl userService = new UserServiceImpl();
        userService.setUserDao(new UserDaoOracleImpl());
        userService.getUser();
    }
}

重点:

再原本的业务中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求趣修改代码 
如果程序代码量十分大,那么修改一次的成本代价十分昂贵。
我们使用一个set接口实现set注入就是spring反转控制的体现。 之前,程序是主动创建对象,控制权再程序猿手上,所以每个需求增加都需要程序呀修改 使用set注入后,程序不再具有主动性,而是变成了被动的接收对象。 这种思想使得程序员无需趣管理对象的创建了,系统的耦合性大大降低,可以专注于业务的实现。
这就是IOC的原型。