当前位置: 首页 > article >正文

Web基础-分层解耦-IOC与DI入门(具体的是实现步骤)

 解耦的思想:

 


 

 具体步骤:

1. Dao Service 层的实现类,交给 IOC 容器管理。
2. Controller Service 注入运行时所依赖的对象。

 1). 将Service及Dao层的实现类,交给IOC容器管理

在实现类加上 @Component 注解就代表把当前类产生的对象交给IOC容器管理。

A. UserDaoImpl

@Component
public class UserDaoImpl implements UserDao {
    @Override
    public List<String> findAll() {
        InputStream in = this.getClass().getClassLoader().getResourceAsStream("user.txt");
        ArrayList<String> lines = IoUtil.readLines(in, StandardCharsets.UTF_8, new ArrayList<>());
        return lines;
    }
}

B. UserServiceImpl

@Component
public class UserServiceImpl implements UserService {

    private UserDao userDao;

    @Override
    public List<User> findAll() {
        List<String> lines = userDao.findAll();
        List<User> userList = lines.stream().map(line -> {
            String[] parts = line.split(",");
            Integer id = Integer.parseInt(parts[0]);
            String username = parts[1];
            String password = parts[2];
            String name = parts[3];
            Integer age = Integer.parseInt(parts[4]);
            LocalDateTime updateTime = LocalDateTime.parse(parts[5], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            return new User(id, username, password, name, age, updateTime);
        }).collect(Collectors.toList());
        return userList;
    }
}

2). 为Controller 及 Service注入运行时所依赖的对象

(删除对实现类的具体的实例化,转为加入@Autowired注解)

A. UserServiceImpl

@Component
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;
    
    @Override
    public List<User> findAll() {
        List<String> lines = userDao.findAll();
        List<User> userList = lines.stream().map(line -> {
            String[] parts = line.split(",");
            Integer id = Integer.parseInt(parts[0]);
            String username = parts[1];
            String password = parts[2];
            String name = parts[3];
            Integer age = Integer.parseInt(parts[4]);
            LocalDateTime updateTime = LocalDateTime.parse(parts[5], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            return new User(id, username, password, name, age, updateTime);
        }).collect(Collectors.toList());
        return userList;
    }
}

B. UserController

@RestController
public class UserController {
    
    @Autowired
    private UserService userService;

    @RequestMapping("/list")
    public List<User> list(){
        //1.调用Service
        List<User> userList = userService.findAll();
        //2.响应数据
        return userList;
    }

}

 启动服务,运行测试。 打开浏览器,地址栏直接访问:http://localhost:8080/user.html 。 依然正常访问,就说明入门程序完成了。 已经完成了层与层之间的解耦。 


小结:

1. 如何将一个类交给 IOC 容器管理?
@Component ( 注意:是加在实现类上,而非接口上 )
2. 如何从 IOC 容器中找到该类型的 bean ,然后完成依赖注入?
@Autowired

 


http://www.kler.cn/a/505981.html

相关文章:

  • 【进程与线程】进程的状态
  • 【docker踩坑记录】
  • vue3+ts+element-plus 输入框el-input设置背景颜色
  • python基础语法(1) ------- 学习笔记分享
  • 【Unity-Animator】通过 StateMachineBehaviour 实现回调
  • rknn环境搭建之docker篇
  • 遥感原理及图像处理
  • 向量数据库Milvus详解
  • day_2_排序算法和树
  • IOS工程师
  • 隧道网络:为数据传输开辟安全通道
  • HttpClient和HttpGet实现音频数据的高效爬取与分析
  • Unity中实现倒计时结束后干一些事情
  • Leetcode 72. 编辑距离 动态规划
  • ASP.NET Core - 配置系统之自定义配置提供程序
  • pytorch小记(六):pytorch中的clone和detach操作:克隆/复制数据 vs 共享相同数据但 与计算图断开联系
  • 【Vue】父组件向子组件传递参数;子组件向父组件触发自定义事件
  • iOS手势shouldBeRequiredToFailByGestureRecognizer 机制
  • vue3 uniapp封装一个瀑布流组件
  • Web开发(二)CSS3基础与进阶
  • Redis从0到1详解(SpringBoot)
  • 面试之《web安全问题》
  • http://noi.openjudge.cn/——4.7算法之搜索——13:Sticks
  • 计算机数据提取与固定
  • Java+Maven+GDAL
  • 图像识别opencv翻转