spring框架学习二(IOC)

IOC的理论推导

导入依赖


org.springframework
spring-webmvc
4.0.9.RELEASE


org.springframework
spring-jdbc
5.2.0.RELEASE

在我们之前的代码中,我们需要根据用户的需求去修改代码,如果程序十分庞大,修改起来会比较麻烦,修改一次的成本就十分昂贵

1.userDao接口

package com.yms.dao;

/**
* @Author 杨明书
* @PackageName: com.yms.dao
* @ClassName: UserDao
* @Description:
* @Date: 2021/12/29 10:09
*/
public interface UserDao {
void getUser();

}

2.userDaoImpl实现类

package com.yms.dao.impl;

import com.yms.dao.UserDao;

/**
* @Author 杨明书
* @PackageName: com.yms.dao.impl
* @ClassName: UserDaoImpl
* @Description:
* @Date: 2021/12/29 10:10
*/
public class UserDaoImpl implements UserDao {
@Override
public void getUser() {
System.out.println("默认获取用户的数据");
}
}

3.userService业务接口

package com.yms.service;

/**
* @Author 杨明书
* @PackageName: com.yms.service
* @ClassName: UserService
* @Description:
* @Date: 2021/12/29 10:12
*/
public interface UserService {

void getUser();
}

4.userServiceImpl业务实现类

package com.yms.service.impl;

import com.yms.dao.UserDao;
import com.yms.dao.impl.UserDaoImpl;
import com.yms.service.UserService;

/**
* @Author 杨明书
* @PackageName: com.yms.service.impl
* @ClassName: UserServiceImpl
* @Description:
* @Date: 2021/12/29 10:13
/
public class UserServiceImpl implements UserService {
/
*
* 程序控制对象,存在的弊端,使用一次就要去换取一次对象,代码冗余
/
// private UserDao userDao=new UserDaoImpl();
/
*
* 解决方案,使用set注入,是的每个用户拿到的数据都是一样的
*
*/
private UserDao userDao;

public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}

@Override
public void getUser() {
System.out.println("这是一个service实现类");
userDao.getUser();

}
}

5.测试类

import com.yms.dao.impl.UserDaoImpl;
import com.yms.dao.impl.UserDaoMysql;
import com.yms.dao.impl.UserDaoOracle;
import com.yms.service.UserService;
import com.yms.service.impl.UserServiceImpl;

/**
* @Author 杨明书
* @PackageName: PACKAGE_NAME
* @ClassName: MyTest
* @Description:
* @Date: 2021/12/29 10:16
*/
public class MyTest {
public static void main(String[] args) {
// UserService userService = new UserServiceImpl();
// userService.getUser();
// UserDaoMysql mysql = new UserDaoMysql();
// mysql.getUser();
// UserDaoOracle userDaoOracle = new UserDaoOracle();
// userDaoOracle.getUser();

UserServiceImpl userService = new UserServiceImpl();
userService.setUserDao(new UserDaoMysql());
userService.getUser();

// UserServiceImpl userService = new UserServiceImpl();
// userService.getUser();

}
}

我们使用set注入后,已经发生了革命性的变化

/**
* 程序控制对象,存在的弊端,使用一次就要去换取一次对象,代码冗余
/
// private UserDao userDao=new UserDaoImpl();
/
*
* 解决方案,使用set注入,是的每个用户拿到的数据都是一样的
*
*/
private UserDao userDao;

public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}

总结:之前,程序是主动创建对象,控制权是在程序员手上

我们使用set注入后,程序不在拥有主动权,而是编程了被动的接受对象

这种思想称之为:控制反转IOC ,程序员不在去关注对象的创建,程序员可以专注于业务的实现!大大降低了耦合性,这就是ioc的原型。

控制反转是一种通过描述(xml或者注解) ,并通过第三方的生产活可获取特定的对象的方式,在spring中实现控制反转的是ioc容器,其实实现的方式就是依赖注入。

posted @ 2021-12-29 11:25  এএ᭄念卿এএ᭄  阅读(50)  评论(0)    收藏  举报