【通俗易懂版】SpringBoot框架的原理和目的

1.为什么要使用SpringBoot?

Spring框架出现的主要目的是降低代码耦合度。

举个例子,我们要实现一个商城的功能,我们需要创建三个类:controller(控制器,接受客户端请求并处理,用户在网页上操作,发送的HTTP请求就是由controller进行处理)、Service(业务逻辑层,主要实现业务功能,Controller接受请求后会调用Service层的方法来执行业务逻辑,例如说用户点击提交订单,controller接收到这个请求后,调用service层的功能去验证库存是否足够,再返回消息给controller。)Repository(数据层,直接与数据库等数据存储媒介交互,service层从repository层调用数据,repository提供数据访问的抽象接口,隐藏数据存储的具体细节)。

不使用Spring框架的话,我们会这样编写代码:

public class OrderController {
    private OrderService orderService;

    public OrderController() {
        this.orderService = new OrderService(new OrderRepository());  // 手动创建依赖对象
    }

    public void createOrder(Order order) {
        orderService.processOrder(order);
    }
}

public class OrderService {
    private OrderRepository orderRepository;

    public OrderService(OrderRepository orderRepository) {
        this.orderRepository = orderRepository;
    }

    public void processOrder(Order order) {
        orderRepository.save(order);
    }
}

public class OrderRepository {
    public void save(Order order) {
        // 保存订单到数据库
    }
}

即在Controller中构建Service对象实现其功能,而Service又会构建Repository对象,这样代码的耦合度很高,如果我们需要修改repository对象,需要把controller、service中有关repository对象的地方都修改。

2.Spring框架如何解决这一问题?

上述问题用通俗易懂的例子来说就是,假设我们有一本书,书中内容是这样的:苹果[一种水果]种植在温带,苹果[一种水果]有很多品种,价格低廉的苹果[一种水果]深受大家的喜爱……
如果此时我想修改注释的内容为[一种红色的水果],需要修改每一处有注释的地方。

那么能不能够我把这一部分注释归类,修改一次,其他内容自动更新?

Spring框架做的就是这样的事。

先介绍一个概念:IOC,Inversion Of Control,控制反转:对象的创建控制权由程序自身转移到外部(容器)。也就是说我们不再由Controller中构建Service对象,而Service又构建Repository对象,我们将这一部分交给IOC容器来处理。这样,我们只需要在IOC容器中管理一个类,而不需要像原来那样修改了一个类要跟着修改依赖他的类。

第一步:将Service和Dao层的实现类交给IOC容器管理

在类上加@component 注解,就是把这个类放入IOC容器中。

第二步:为Controller和Service注入运行时依赖的对象

在成员变量(依赖的对象)上加上@Autowired 注解

@Component //OrderService类放入容器中,放入容器的类可以通过@Autowired进行依赖注入
public class OrderService {

    @Autowired //注入OrderRepository类型的对象
    private OrderService orderRepository;

这么做的好处是,如果我想更改Service类,我只需要把Service类上的Component注解给我修改后的新的Service类即可,当然,这两个Service类继承了同一接口OrderService。

这个过程称之为依赖注入,Dependency Injection,DI。而在IOC容器中创建、管理的对象,称之为Bean对象。

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值