Spring--简介

Spring

1.1 Spring简介

  • spring:春天,给整个java开发带来了春天
  • 2002,Spring首次推出了Spring框架的雏形:interface21
  • Rod Johnson,他是Spring创始人
  • Spring:说白了,就是一个大杂烩,整合了现有的技术框架

1.2 Spring优点

  • Spring是一个免费的框架
  • Spring是一个轻量级的,非入侵式的框架
  • 控制反转(IOC),面向切面编程(AOP)
  • 支持事务的处理,对整合的框架支持

IOC理论推导

控制反转是一种通过描述(XML或注解),并通过第三方法生产或者获取特定对象的方式,在Spring中实习控制反转的是IOC容器,实现方法是依赖注入(Dependency Injection ,DI)

1.1 maven导入相关依赖

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.14</version>
        </dependency>`

为什么选择webmvc,因为它包含的依赖包比较全面🤪;

1.2 聊一下最开始写业务的顺序

  1. 先写Dao层接口
package com.j.dao;

/**
 * Created by jdx on 2022/1/3 下午7:03
 */
public interface BookDao {
    /**
     * @return void
     * @description 定义获取书籍的方法
     * @author create by JDX
     * @date 2022/1/3 下午7:06
     */
    void getBook();
}
  1. 在写Dao的实现类
package com.j.dao;

/**
 * Created by jdx on 2022/1/3 下午7:07
 */
public class BookDaoImpl implements BookDao {
    /**
     * @return void
     * @description : getBook 实现类
     * @author create by JDX
     * @date 2022/1/3 下午7:07
     */
    @Override
    public void getBook() {
        System.out.println("获取默认书籍!!!");
    }
}

3.然后在写Service

package com.j.service;

/**
 * Created by jdx on 2022/1/3 下午7:09
 */
public interface BookService {
    /**
     * @return void
     * @description 定义service接口
     * @author create by JDX
     * @date 2022/1/3 下午7:10
     */
    void getBook();
}

  1. 在写一下service实现类
package com.j.service;

import com.j.dao.BookDao;
import com.j.dao.BookDaoImpl;

/**
 * Created by jdx on 2022/1/3 下午7:10
 */
public class BookServiceImpl implements BookService {
    //引入Dao层
    BookDao bookDao = new BookDaoImpl();
    /**
     * @return void
     * @description 实现 getBook 方法
     * @author create by JDX
     * @date 2022/1/3 下午7:11
     */
    @Override
    public void getBook() {
        bookDao.getBook();
    }
}

接下来在写一下测试类

import com.j.service.BookService;
import com.j.service.BookServiceImpl;

/**
 * Created by jdx on 2022/1/3 下午7:18
 */
public class noIoc {
    public static void main(String[] args) {
        BookService bookService = new BookServiceImpl();
        bookService.getBook();
    }
}

输出结果如下:

获取默认书籍!!!

那么在这里,我们就得想一想,如果我们按照最原始的逻辑去编写代码,那么在这个编写过程中会是否会遇到以下这个问题。

  1. 当客户提出我不要固定书籍了,我要从Mysql数据库里面输出,那么我们就得修改Dao层数据实现类,如下所示
	//修改Dao实现类
    public void getBook() {
        System.out.println("获取Mysql默认书籍!!!");
    }

输出结果为:

获取Mysql默认书籍!!!

目前为止,我们代码量少,还不会有太大的影响,好像也会觉得改几行代码的事情,可是你要想到,你这个项目会交给git管理,你经常改代码或许造成代码冲突,这个时候那就美滋滋了🙄 这是其一。其二,你如果在面对客户的时候需求的改变量是巨大的,这是没有办法避免的事情,甲方爸爸不是白叫的,你修改代码将会导致团队开发中陆陆续续出现各种小问题。

  1. 既然发现了问题所在,那么来看解决方法,我们使用一个set方法实现动态值的注入,如下:
package com.j.service;

import com.j.dao.BookDao;

/**
 * Created by jdx on 2022/1/3 下午7:10
 */
public class BookServiceImpl implements BookService {
    //引入Dao层
    public BookDao bookDao;
	//在这里编写set方法
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    /**
     * @return void
     * @description 实现 getBook 方法
     * @author create by JDX
     * @date 2022/1/3 下午7:11
     */
    @Override
    public void getBook() {
        bookDao.getBook();
    }
}

看完上述代码,或许不难发现,本次修改使用set接口实现,从代码本质上发生了革命性的变化。原因有如下俩点:

  • 最开始,程序是主动创建对象!控制权在程序员的手上。
  • 使用了set注入之后,程序就变成了被动的接受对象了。

这种思想,从本质上解决了问题,我们基本上不用在去管理对象的创建了,系统的耦合性大大的降低。这种思想贯穿了IOC,也可称之为IOC的原型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敏姐儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值