成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring中被放棄的@Autowired,你會用嗎?

開發 架構
@Autowired有三種注入方式,分別為:字段(屬性)注入,構造函數注入和Setter方法注入。另外,@Autowired參數注入,僅在單元測試才有意義;靜態字段(屬性)注入為空問題,需要結合構造函數或Setter方法注入。

注入方式一:屬性(字段)注入

在某個屬性(字段)上使用@Autowired注解時,Spring在創建該Bean的過程中,會根據字段的類型或名稱從Spring容器中查找到所匹配的Bean對象,并賦值給該熟悉。

@Service
public class UserService {

    // 注入方式一:屬性注入
    @Autowired
    private RoleService roleService;

    public void printRoleService() {
        System.out.println(roleService);
    }

}

注入方式二:Setter注入

在某個Setter方法上使用@Autowired注解時,Spring在創建該Bean的過程中,會來調用該Setter方法,并且如果Set方法有入參參數,那么Spring會格局入參參數信息,從Spring容器中找到所匹配的Bean對象賦值給該入參。我們通過再Setter方法中給屬性賦值,從而就達到了Setter方法注入的目的。

@Service
public class UserService {

    private RoleService roleService;

    public void printRoleService() {
        System.out.println(roleService);
    }

    public RoleService getRoleService() {
        return roleService;
    }

    // 注入方式二:Setter注入
    @Autowired
    public void setRoleService(RoleService roleService) {
        this.roleService = roleService;
    }
}

注意:@Autowired注解其實可以添加在任何一個普通方法上,不一定是Setter方法。

注入方式三:構造函數注入

當某個構造方法上使用@Autowired注解時,表示該Bean在創建時會使用這個構造方法來實例化得到一個對象,并且Spring會根據該構造函數的入參參數的類型和名字,從Spring容器中找到所匹配的Bean對象傳給該入參,通過在構造函數中給屬性賦值,從而就達到了構造函數注入的目的。

@Service
public class UserService {

    private RoleService roleService;

    // 注入方式三:構造函數注入
    @Autowired
    public UserService(RoleService roleService) {
        this.roleService = roleService;
    }

    public void printRoleService() {
        System.out.println(roleService);
    }
}

注入方式四:參數注入

盡管@Autowired注解可以加在普通方法或構造方法的參數之前,但是Spring框架中大部分地方都忽略了這種情況下的@Autowired注解,僅僅在spring-test模塊中的對于JUnit Jupiter的支持中,支持了參數前添加@Autowired。

@SpringBootTest(classes = ConstructorAttributeMain.class)
class UserServiceTest {

    @Test
    void printRoleService(@Autowired UserService userService) {
        userService.printRoleService();
    }
}

required屬性釋義

  • required=true:默認值,必須存在Bean,否則報錯
  • required=false:若找不到Bean,則為空
@Service
public class UserService {

    @Autowired(required = true)
    private RoleService roleService;

    @Autowired(required = false)
    private MenuService menuService;

    public void print() {
        System.out.println("role: " + roleService); // print class
        System.out.println("menu: " + menuService); // pint null
    }
}

靜態屬性(字段)注入

靜態屬性(字段)或方法是不會進行依賴注入的。

@Service
public class UserService {

    @Autowired
    private static RoleService roleService;


    public void printRole() {
        System.out.println(roleService);
    }
}

但是實際開發中,我們可能會遇到此問題。因此,有兩種方式解決此問題:

構造方法注入

@Service
public class UserService {

    private static RoleService roleService;

  // 解決靜態導入第一種方式:構造函數注入
    @Autowired
    public UserService(RoleService roleService) {
        UserService.roleService = roleService;
    }

    public void printRole() {
        System.out.println(roleService);
    }
}

Setter方法注入

@Service
public class UserService {

    private static RoleService roleService;

    // 解決靜態導入第二種方式:Setter方法注入
    @Autowired
    public void setRoleService(RoleService roleService) {
        UserService.roleService = roleService;
    }

    public void printRole() {
        System.out.println(roleService);
    }
}

小結

綜上所述,@Autowired有三種注入方式,分別為:字段(屬性)注入,構造函數注入和Setter方法注入。

另外,@Autowired參數注入,僅在單元測試才有意義;靜態字段(屬性)注入為空問題,需要結合構造函數或Setter方法注入。

責任編輯:姜華 來源: 今日頭條
相關推薦

2025-01-20 00:00:00

反射Java語言

2020-06-04 14:15:55

Java中BigDecimal函數

2018-09-29 15:34:34

JavaList接口

2021-05-21 12:36:16

限流代碼Java

2021-09-06 10:42:18

Linux命令服務器

2021-08-11 10:00:51

緩存MyBatis管理

2021-08-05 18:21:29

Autowired代碼spring

2025-02-14 08:30:49

SpringJava開發

2019-01-28 17:42:33

Python數據預處理數據標準化

2019-07-25 12:46:32

Java高并發編程語言

2025-01-03 08:40:53

Java并發編程Guava庫

2023-01-28 10:27:04

2023-10-08 10:14:12

2021-11-03 17:40:51

Python線程

2023-12-01 11:13:50

JavaTreeSet

2024-04-08 00:00:00

asyncawaiPromise

2022-02-10 09:04:50

架構

2015-09-06 10:14:21

swift加載動畫實例教程

2018-06-26 10:04:41

Siri語音微信

2021-09-16 11:02:49

Python線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕在线看第二 | 一区二区视频在线 | 狠狠干网 | 欧美在线视频一区 | 午夜久久 | 一区精品在线观看 | 国产区精品 | 欧美黄色录像 | 亚洲精品国产成人 | 91操操操 | 日韩视频在线观看一区二区 | 久久久久亚洲精品 | 久草99 | 亚洲成网| 精品国产一区二区三区成人影院 | 日本大香伊一区二区三区 | 免费视频一区二区 | 久久精品国产一区二区电影 | 天天欧美 | 欧美综合视频在线 | 精品视频一区二区三区在线观看 | 奇米影视在线 | 欧洲精品久久久久毛片完整版 | 999久久久久久久久6666 | 国产黄色大片在线观看 | 日韩一 | 精品久久久久久久 | 午夜国产| 亚洲 中文 欧美 日韩 在线观看 | 欧美日韩在线免费 | 国产美女福利在线观看 | 国产精品不卡一区 | 国产精品久久久久久久久久妞妞 | 国产精品中文字幕在线观看 | 午夜影视免费片在线观看 | 日本不卡免费新一二三区 | 一区二区在线不卡 | 色综合99| 国产欧美一区二区精品久导航 | 国产一级视频 | 欧美一级毛片免费观看 |