当前位置: 首页 > 图灵资讯 > 技术篇> 先导引入spring

先导引入spring

来源:图灵教育
时间:2023-05-23 09:32:42

1.需要jdk17准备1Spring6,idea2022.*版本2.OCP开闭原则42.1什么是OCP?4

OCP是软件七大开发原则中最基本的原则:开闭原则

对什么开放?对扩张开放。

什么是关闭?关闭修改。

OCP原则是最核心、最基本的,其他六个原则都是为这一原则服务的。

2.2OCP开闭原则的核心是什么?4

只要您在扩展系统功能时没有修改以前编写的代码,您就符合OCP原则。

相反,如果您在扩展系统功能时修改了以前的代码,则该设计失败,违反了OCP原则。当系统功能扩展时,如果您移动了以前稳定的程序并修改了以前的程序,则需要重新测试以前的所有程序。我不想看到它,因为它很麻烦。

3.依赖倒置原则(DIP原则)5

先导引入spring_DIP原则

3.1依赖倒置的原则是什么?5

面向接口编程,面向抽象编程,不面向具体编程。

3.2依赖倒置原则的目的?5

降低程序耦合度,提高扩展性。

3.3什么叫依赖倒置?5.

上不依赖下,就是符合。

3.4什么是违反依赖倒置?5.

上依赖下,就是违背。

只要“下”改变,“上”就会牵连。

4.Spring启示录34.1阅读以下代码3-4com.powernode.spring6.dao持久层接口Userdaodao
package com.powernode.spring6.dao;//持久层  3public interface UserDao {    /////用户信息根据id删除  3    void deleteById();}
com.powernode.spring6.dao.实现类UserdaoimplForMySQL持久层
package com.powernode.spring6.dao.impl;import com.powernode.spring6.dao.UserDao;/** * 实现mysql的持久层类  3 **/public class UserDaoImplForMySQL implements UserDao {    @Override    public void deleteById() {        System.out.println(MySQL数据库正在删除用户信息...");    }}
实现类UserDaoImplForOracler

可以看出,UserdaoimplFormySQL主要连接MySQL数据库进行操作。如果更换到Oracle数据库,则需要提供另一个UserdaoimplForacle,如下:

package com.powernode.spring6.dao.impl;import com.powernode.spring6.dao.UserDao;/***   oracle的持久层实现类  4 **/public class UserDaoImplForOracle implements UserDao {    @Override    public void deleteById() {        System.out.println(”Oracle数据库正在删除用户数据...");    }}
com.powernode.spring6.UserServiceservice业务层接口
package com.powernode.spring6.service;/** * 业务层  3 **/public interface UserService {    /**     * 删除用户信息     */    void deleteUser();}
com.powernode.spring6.service.impl业务层实现了Userserviceimpllepl
package com.powernode.spring6.service.impl;import com.powernode.spring6.dao.UserDao;import com.powernode.spring6.dao.impl.UserDaoImplForMySQL;import com.powernode.spring6.dao.impl.UserDaoImplForOracle;import com.powernode.spring6.service.UserService;/** * 业务层实现类 3 **/public class UserServiceImpl implements UserService {    private UserDao userDao = new UserDaoImplForMySQL();    @Override    public void deleteUser() {        userDao.deleteById();    }}
com.powernode.spring6.web表示UserAction
package com.powernode.spring6.web;import com.powernode.spring6.service.UserService;import com.powernode.spring6.service.impl.UserServiceImpl;/** * 表示层  3 **/public class UserAction {    private UserService userService = new UserServiceImpl();    // 修改为    //private UserService userService;    /**     * 删除用户信息请求  3     */    public void deleteRequest(){        userService.deleteUser();    }}

显然,上述操作正在扩展功能,并添加了一个新的UserdaoimplForacle来应对数据库的变化。这里的变化会引起连锁反应吗?当然,如果您想切换到Oracle数据库,需要修改Userserviceimpl代码,如下:

public class UserServiceImpl implements UserService {    //private UserDao userDao = new UserDaoImplForMySQL();    // 修改为oracle  4    private UserDao userDao = new UserDaoImplForOracle();    //private UserDao userDao;    @Override    public void deleteUser() {        userDao.deleteById();    }}
com.powernode.spring6.Testttttttetclient测试
package com.powernode.spring6.client;import com.powernode.spring6.web.UserAction;//负责测试   3public class Test {    public static void main(String[] args) {        UserAction userAction = new UserAction();        userAction.deleteRequest();    }}

先导引入spring_控制反转_02

4.2分析问题5

这样,OCP违反了开闭原则。开闭原则是这样说的:在软件开发过程中,要对扩展开放,对修改关闭。也就是说,如果在功能扩展中添加额外的类别没有问题,但由于功能扩展而修改以前的正常程序是禁忌和不允许的。因为一旦正常程序在修改前运行,整个项目将进行全面的重新测试。这是一个非常麻烦的过程。上述问题的主要原因是代码和代码之间的耦合度过高。如下图所示:

先导引入spring_DIP原则_03

可以清楚地看到,上层是依赖下层是的。Usercontroller依赖于Userserviceimpl,而Userserviceimpl依赖于UserdaoimplformySQL,这将导致只需更改下面的内容以上必然会牵连(也会随之改变),所谓牵一发,动全身。这也违反了另一个发展原则:依靠倒置原则。

目前的程序设计显然违反了OCP和DIP。我该怎么办?

这个问题可以通过编程思想“控制反转”来解决。

5.控制反转是什么?6

控制反转:IoC(InversionofControl)

5.1反转是什么?6.1反转?

逆转是两件事:

第一件事:我不在程序中使用硬编码来new对象。(我不在乎new对象,new对象的权利已经交出。)

第二件事:我不会在程序中使用硬编码来维护对象之间的关系。(我不在乎对象之间关系的维护权。我把它交出去了。)

控制逆转:是一种编程理念。或者是一种新的设计模式。由于其出现相对较新,不包括在GoF23设计模式中。

6.Spring框架7

*Spring框架实现了控制反转IOC的思想

Spring框架可以帮助您new对象。

Spring框架可以帮助您维护对象和对象之间的关系。

*Spring是实现IoC思想的容器。

控制反转的实现方法有很多,其中更重要的是:依赖注入(DependencyInjection,简称DI)。

*控制反转是思想。依靠注入是这种思想的具体实现。

6.1依赖于DI注入,包括两种常见的方法:7.1

第一种:set注入(执行set方法赋值属性)

二是注入结构方法(执行结构方法赋予属性赋值)

6.2依赖注入中的“依赖”是什么意思?“注入”是什么意思?

依赖:A对象与B对象的关系。

注:这是一种手段,可以使A对象与B对象有关。

依赖注入:对象A和对象B之间的关系通过注入来维持。注入包括:set注入和结构注入。

7.注意术语:8

OCP:开闭原则(开发原则)

DIP:依靠倒置原则(开发原则)

IoC:控制反转(一种思想,一种新的设计模式)

DI:依靠注入(控制反转思想的具体实现方式)