Spring_IOC思想

IOC理论

因为用户的需求可能会影响原来写好的代码,所以我们可以通过set方法,实现控制反转,将控制权交给用户。

原来的程序

public interface UserDao {

    void getUser();
}
public class UserDaoImpl implements UserDao{

    @Override
    public void getUser() {
        System.out.println("1111");
    }
}

public interface UserService {

    void getUser();
}

public class UserServiceImpl implements UserService{

    private UserDao userDao;
    
    public UserServiceImpl() {
        this.userDao=new UserDaoImpl();
    }

    @Override
    public void getUser() {
        userDao.getUser();
    }
}
    public static void main(String[] args) {
        UserServiceImpl userService = new UserServiceImpl();
        userService.getUser();
    }

若此时,用户需要在添加功能

public class UserDaoOracleImpl implements UserDao{
    @Override
    public void getUser() {
        System.out.println("oracle1111");
    }
}
public class UserDaoMysqlImpl implements UserDao{
    @Override
    public void getUser() {
        System.out.println("mysql1111");
    }
}
    public static void main(String[] args) {
        UserServiceImpl userService = new UserServiceImpl();
        userService.getUser();
        UserDaoMysqlImpl userDaoMysql = new UserDaoMysqlImpl();
        userDaoMysql.getUser();
        UserDaoOracleImpl userDaoOracle = new UserDaoOracleImpl();
        userDaoOracle.getUser();
    }

因为用户新增功能,导致程序员不得不修改原来的代码,但是如果工程架构复杂,就会很有可能出错。控制权一直都在程序员手中

再次理解IOC思路,我们可以使用set方法

public class UserServiceImpl implements UserService{

    private UserDao userDao;


    //利用set进行动态实现值的注入
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void getUser() {
        userDao.getUser();
    }
}
    @Test
    public void test(){
        UserServiceImpl userService =new UserServiceImpl();
        userService.setUserDao(new UserDaoImpl());
        userService.getUser();
    }

此时,主动权就交给用户,用户想要实现UserDaoImpl,就通过set方法自己注入new UserDaoImpl(),想要实现UserDaoMysqlImpl,就通过set方法注入new UserDaoMysqlImpl()

posted @ 2023-01-05 22:01  Fannaa  阅读(16)  评论(0)    收藏  举报