Spring-IOC

和哗發表於2024-07-06

Spring-IOC簡介

IOC(Inversion of Controller)控制反轉。把物件的控制權轉移 Spring框架,由 Spring 框架來管理物件的生命週期(例如物件的建立和銷燬),還可以管理物件之間的依賴關係。

所以 IOC 又叫作 DI

DI簡介

DI(Dependency Injection)依賴注入。當一個物件依賴另一個物件時,容器可以直接把另一個物件注入,直接使用。

依賴注入方式

依賴注入的方式有3種設值注入,構造注入,註解注入

準備工作:

pom依賴包:

<!--統一管理版本號-->
    <properties>
        <spring.version>5.3.12</spring.version>
    </properties>

    <dependencies>
        <!--Spring的核心包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--spring  核心包 結束-->
        <!--Lombok依賴包-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

User實體類:

package com.hrc.Test3;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @FileName: User
 * @Description:
 * @Author: hrc
 * @CreateTime: 2024/6/17 17:42
 * @Version: 1.0.0
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private  Integer userId;
    private  String userName;
    private  String realName;
    private  Integer age;
 
    private Animal animal;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class Animal{
    private Integer id;
    private String name; 
}

    1. 設值注入

設值注入的前提:配置 set注入配置,一定要屬性的set方法

舉個例子:

//類中一定要有這個方法才可以被設值注入
public class A{
   private int a;
   //set方法
   public void setA(int a){
        this.a  =  a;
   }
}

設值注入存在兩種方式:

value 方式,注入的型別為基本型別,如:int,char,double等

ref 方式,注入的型別為引用型別,如:String,類等

舉個例子:

    2. 構造注入

構造注入前提:配置set注入時,必須有建構函式

舉個例子:

public class A{
   private int a;
   
//空建構函式
   public A(){}

//全參建構函式
   public A(int  a){
        this.a = a;
   }  
}

構造注入方式:

    3. 註解注入

  Spring針對 Bean物件的建立提供以下註解。

  ①@Component註解:用於放在三層(控制層,服務層,持久層)之外的物件

  ②@Controller註解:用於控制層

  ③@Service註解:用於服務層

  ④@Repository註解:用於持久層

當然,只寫這些註解是不夠的,需要在xml檔案中掃描這些註解才可以放到SpringIOC中

舉個例子:

xml檔案掃描例子:

如何進行物件之間依賴注入呢?

可以使用@Autowired註解注入其他物件

擴充套件知識點

Spring中的 bean預設是單例模式,如果不想是單例,想要原型模式如何設定?

①xml檔案配置bean的方式

②註解的方式配置bean