关于Spring Boot IOC&DC,看这一篇就够了

一,Spring是什么及常用注解

先说什么是spring,在前面的博客中已经知道了,spring是一个开源框架,为了让我们开发更加简单,那关于ioc呢,一句话概况一下:Spring就是包含了众多工具方法的Ioc容器

注解:

共有两类大注解:

类注解:@Controller、@Service、@Repository、@Component、@Configuration.

⽅法注解:@Bean.

@Controller:控制器存储,控制层,接收请求,对请求进⾏处理,并进⾏响应.

@Service:服务存储,也就是用来存储业务层组件。

@Repository:仓库存储,也称为持久层.负责数据访问操作。

@Component:组件存储,使其能够被Ioc自动扫描识别并管理。

@Configuration:配置存储,处理项⽬中的⼀些配置信息。

@Bean:方法注解,@Bean注解的方法会产生一个Bean对象,该对象由Spring管理并放到IoC容器中。

@Autowired:注入依赖,在Controller层和Service层注⼊运⾏时依赖的对象

二, 什么是Ioc

也就是比如在平常创建对象需要一个一个new,而使用了它之后,就不需要了,交给容器,集中处理,一键完成,方便省事。

Ioc:Inversion of Control  (控制反转)也就是将创建对象的控制权反转到Spring上。

IOC的优点:

1.资源的集中管理,我们需要使用的时候,直接在容器里取就可以了。

2.降低耦合度,不会牵一发而动全身,降低了依赖程度。

也就是我们将一些自己需要创建的东西外包出去,然后使他们来负责,这样即使出了问题,让他们修改就行了,我们也不用整体改了。

三,什么是DI

从上述可以看出IOC在处理的时候,其实也就是一个依赖注入的容器,而依赖注入就是DI。

DI:依赖注入,也就是在容器运行期间,动态的为应用程序提供运行时所依赖的资源。

DI也就是Ioc的一种实现,也就比如今天想出去下馆子,那么下馆子就是IOC,而去吃川菜和粤菜,就是DI。

三,依赖注入

spring依赖注入主要分为三种实现方式:属性注入,构造方法注入,setter注入

3.1属性注入

应用层代码:

@Service
public class UserService {
    public void doService(){
        System.out.println("service ...");
    }
}

控制层代码:

@Controller
public class HelloConteoller {
    @Autowired
    private UserService userService;
    public void sayHi(){
        userService.doService();
        System.out.println("HelloConreoller");
    }

3.2构造方法注入

构造方法是在类的构造方法中实现注入:

控制层代码:

@Controller
public class HelloConteoller {
    //构造方法注入
    private UserComponent userComponent;

    public HelloConteoller(UserService userService){
        this.userService = userService;
    }
    @Autowired
    public HelloConteoller(UserService userService, UserComponent userComponent){
        this.userService = userService;
        this.userComponent = userComponent;
    }
}

3.3setter方法注入

在设置setter方法的时候要加@Autowired注解。

控制层代码:

@Controller
public class HelloConteoller {
    // setter方法注入:
    @Autowired
    public void setUserService(UserService userService){
        this.userService = userService;
    }
    public void sayHi(){
        userService.doService();
        System.out.println("HelloConreoller");
    }
}

3.4三种方法优缺点

1.属性注入:

优:简洁,方便

缺:只能使用IOC容器,其他不行,不能注入一个Final修饰的属性。

2.构造方法注入:

优:可以注入Final修饰的属性,注入的对象不会被修改,任何框架都可以支持。

缺:注入多个对象要一个一个打代码。

3.setter方法注入

优:在类实例之后,还能对该对象进行配置或者注入。

缺:也不能注入Final修饰的属性,setter方法被多次调用就会有被修改的风险。

相关推荐

  1. 关于Spring Boot IOC&DC,

    2024-07-22 00:58:03       30 阅读
  2. 入门SAM

    2024-07-22 00:58:03       43 阅读
  3. Rust async,

    2024-07-22 00:58:03       45 阅读
  4. 关于基本算法思想

    2024-07-22 00:58:03       45 阅读
  5. 关于排序算法

    2024-07-22 00:58:03       41 阅读
  6. TypeScript

    2024-07-22 00:58:03       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 00:58:03       143 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 00:58:03       157 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 00:58:03       132 阅读
  4. Python语言-面向对象

    2024-07-22 00:58:03       142 阅读

热门阅读

  1. 关于数据库索引

    2024-07-22 00:58:03       35 阅读
  2. 【Node.js基础04】node.js模块化

    2024-07-22 00:58:03       33 阅读
  3. Postman实战案例:从零开始设计API测试流程

    2024-07-22 00:58:03       33 阅读
  4. linux文本查看命令

    2024-07-22 00:58:03       27 阅读
  5. 基于深度学习的医学影像分类

    2024-07-22 00:58:03       33 阅读
  6. 装修前需要提前准备啥

    2024-07-22 00:58:03       26 阅读
  7. 数组指针跟指针数组的区别

    2024-07-22 00:58:03       26 阅读