प्रौद्योगिकी साझेदारी

@RequiredArgsConstructor कन्स्ट्रक्टर इन्जेक्शन् कार्यान्वितं करोति

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

@RequiredArgsConstructor कन्स्ट्रक्टर इन्जेक्शन् कार्यान्वितं करोति

1. @Autowired तथा@Resource टिप्पणी

@Autowired
  • @Autowired इदं Spring framework द्वारा प्रदत्तं एनोटेशनम् अस्ति तथा च स्वयमेव निर्भरतां संयोजयितुं उपयुज्यते ।
  • क्षेत्रेषु, कन्स्ट्रक्टर्, सेटर मेथड् इत्यत्र च उपयोक्तुं शक्यते ।
@Autowired
private ISysUserService userService;
  • 1
  • 2
@Resource
  • @Resource इदं जावा ईई द्वारा प्रदत्तं एनोटेशनम् अस्ति, तथा च स्प्रिंग् इत्यनेन आश्रितानां स्वचालितसंयोजनाय अपि तस्य समर्थनं भवति ।
  • सामान्यतया क्षेत्राणां सेटरविधीनां च कृते प्रयुक्तम् ।
@Resource
private ISysUserService userService;
  • 1
  • 2

2. कन्स्ट्रक्टर इन्जेक्शन

लोम्बोक् इत्यस्य प्रयोगः @RequiredArgsConstructor

springboot @RequiredArgsConstructor-Tencent Cloud Developer Community-Tencent Cloud (tencent.com) इत्यस्य अवधारणा तथा उपयोगः

  • @RequiredArgsConstructor लोम्बोक् द्वारा प्रदत्तं टिप्पणी अस्ति, यत् स्वयमेव सर्वाणि जनयिष्यतिfinal क्षेत्रनिर्माता।
  • कन्स्ट्रक्टर् इन्जेक्शन् इत्यस्य उपयोगेन वस्तुनः निर्माणे निर्भरता इन्जेक्शन् सम्पन्नं भवति इति सुनिश्चितं भवति, येन सर्वाणि निर्भरतानि अशून्यानि सन्ति इति सुनिश्चितं भवति ।
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController {
    private final ISysUserService userService;
    private final ISysRoleService roleService;
    private final ISysPostService postService;
    private final ISysDeptService deptService;
    private final ISysUserPostService userPostService;
    
    // 构造函数由 Lombok 自动生成,注入所有 final 字段
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3. तुलना लाभाः च

क्षेत्र इन्जेक्शन ( .@Autowired तथा@Resource
  • लाभ: कोडः संक्षिप्तः अस्ति तथा च क्षेत्रेषु प्रत्यक्षतया टिप्पणीकृतः अस्ति।
  • अभावः
    • एककपरीक्षणं कठिनं यतः नकलीवस्तूनि प्रतिबिम्बेन वा अन्यसाधनेन वा इन्जेक्शनं कर्तुं आवश्यकम्।
    • आश्रित्य-इञ्जेक्शन् वस्तुनः निर्माणानन्तरं भवति, येन आश्रयाणां अपूर्णता आरम्भः भवितुम् अर्हति ।
    • आश्रयव्यावृत्तिसिद्धान्तस्य उल्लङ्घनं कृत्वा वर्गः प्रत्यक्षतया पात्रस्य उपरि आश्रितः भवति ।
कन्स्ट्रक्टर इन्जेक्शन
  • लाभ
    • वस्तुनः निर्माणे पूर्णतया आरम्भं कर्तुं आश्रयान् बाधयन्तु, सर्वाणि आश्रयाणि अशून्यानि इति सुनिश्चित्य ।
    • कन्स्ट्रक्टर् मार्गेण नकलीवस्तूनि इन्जेक्शन् कर्तुं शक्यन्ते इति कारणतः यूनिट् टेस्ट् कर्तुं सुकरम् ।
    • इदं निर्भरताव्यावृत्तिसिद्धान्तेन सह अधिकं सङ्गतं भवति तथा च वर्गं पात्रात् अधिकं स्वतन्त्रं करोति ।
    • विशेषतः यदा बहवः आश्रयाः सन्ति तदा कोडपठनीयता, परिपालनक्षमता च उन्नता ।
  • अभावः: अतिरिक्तं कन्स्ट्रक्टर् कोड् आवश्यकम्, परन्तु लोम्बोक् इत्यस्य उपयोगं करोति @RequiredArgsConstructor एषः भारः उपशमयितुं शक्यते ।

4. उदाहरणतुलना

उपयुञ्जताम्‌ @Autowired
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController {
    
    @Autowired
    private ISysUserService userService;
    
    @Autowired
    private ISysRoleService roleService;
    
    @Autowired
    private ISysPostService postService;
    
    @Autowired
    private ISysDeptService deptService;
    
    @Autowired
    private ISysUserPostService userPostService;

    // 其他代码
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
कन्स्ट्रक्टर इन्जेक्शन् इत्यस्य उपयोगेन
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController {
    private final ISysUserService userService;
    private final ISysRoleService roleService;
    private final ISysPostService postService;
    private final ISysDeptService deptService;
    private final ISysUserPostService userPostService;

    // 其他代码
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

कन्स्ट्रक्टर् इन्जेक्शन् इत्यस्य एतस्याः पद्धत्या न केवलं कोडस्य दृढता, परिपालनक्षमता च वर्धयितुं शक्यते, अपितु स्प्रिंग् इत्यस्य निर्भरता इन्जेक्शन् विशेषताः, लोम्बोक् इत्यस्य सरलीकृतसङ्केतस्य लाभाः च उत्तमरीत्या उपयोक्तुं शक्यन्ते

लाभः

स्प्रिंगस्य कन्स्ट्रक्टर् Injection_spring कन्स्ट्रक्टर् इन्जेक्शन्-CSDN ब्लॉग्
कृपया चित्रविवरणं योजयन्तु

5. टिप्पणीनां विषये

कन्स्ट्रक्टर् इन्जेक्शन् इत्यस्य उपयोगं कुर्वन् अतिरिक्त एनोटेशन्स् योजयितुं आवश्यकता नास्ति, केवलं कन्स्ट्रक्टर् इत्येतत् प्रदातव्यम् । स्प्रिंग स्वयमेव भवतः कन्स्ट्रक्टर् इत्यस्य ज्ञापनं करिष्यति, निर्भरता-इञ्जेक्शन् च करिष्यति ।

कन्स्ट्रक्टर इन्जेक्शन् इत्यस्य उपयोगं कुर्वन्तु, अतिरिक्त एनोटेशनस्य आवश्यकता नास्ति
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController {
    private final ISysUserService userService;
    private final ISysRoleService roleService;
    private final ISysPostService postService;
    private final ISysDeptService deptService;
    private final ISysUserPostService userPostService;

    // 自己编写构造函数
    public SysUserController(ISysUserService userService, 
                             ISysRoleService roleService, 
                             ISysPostService postService, 
                             ISysDeptService deptService, 
                             ISysUserPostService userPostService) {
        this.userService = userService;
        this.roleService = roleService;
        this.postService = postService;
        this.deptService = deptService;
        this.userPostService = userPostService;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
कन्स्ट्रक्टर इन्जेक्शन् इत्यस्य उपयोगस्य प्रमुखबिन्दवः
  1. कन्स्ट्रक्टर् परिभाषयन्तु : १.
    • वर्गे एकं कन्स्ट्रक्टर् परिभाषयन्तु यस्मिन् सर्वाणि आवश्यकानि आश्रयाणि सन्ति ।
  2. वसन्त स्वचालित इन्जेक्शन : १.
    • यदा Spring Bean उदाहरणं निर्माति तदा स्वयमेव कन्स्ट्रक्टर् इत्यस्य परिचयं कृत्वा आह्वयति तथा च आवश्यकानि निर्भरतानि इन्जेक्शन् करोति ।

नमूना कोड

package com.example.demo.controller;

import com.example.demo.service.ISysUserService;
import com.example.demo.service.ISysRoleService;
import com.example.demo.service.ISysPostService;
import com.example.demo.service.ISysDeptService;
import com.example.demo.service.ISysUserPostService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/system/user")
public class SysUserController {

    private final ISysUserService userService;
    private final ISysRoleService roleService;
    private final ISysPostService postService;
    private final ISysDeptService deptService;
    private final ISysUserPostService userPostService;

    // 构造函数注入
    public SysUserController(ISysUserService userService, 
                             ISysRoleService roleService, 
                             ISysPostService postService, 
                             ISysDeptService deptService, 
                             ISysUserPostService userPostService) {
        this.userService = userService;
        this.roleService = roleService;
        this.postService = postService;
        this.deptService = deptService;
        this.userPostService = userPostService;
    }

    // 你的控制器方法
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

अस्मिन् उदाहरणे, कन्स्ट्रक्टर् इत्यस्य एनोटेशनं कर्तुं किमपि अतिरिक्तं एनोटेशनं उपयोक्तुं आवश्यकता नास्ति, Spring स्वयमेव निर्भरतां चिनोति, इन्जेक्शन् च करिष्यति । (अवश्यं, यदि चिह्नितं भवति तर्हि कोऽपि दोषः न निवेदितः भविष्यति, परन्तु केवलं @Autowired इत्यस्य उपयोगः कर्तुं शक्यते, @Resouce इत्यस्य उपयोगः कर्तुं न शक्यते ।@Resource एनोटेशन्स् सामान्यतया फील्ड् अथवा सेटर मेथड् इन्जेक्शन् कृते उपयुज्यन्ते)

अतिरिक्तपरिस्थितयः
  1. अनेकाः निर्मातारः : १.
    • यदि कस्मिन् अपि वर्गे बहुविधाः कन्स्ट्रक्टर् सन्ति तथा च तेषु केवलम् एकस्य एव इन्जेक्शन् पैरामीटर्स् सन्ति तर्हि Spring इत्येतत् कन्स्ट्रक्टर् इत्यस्य उपयोगं इन्जेक्शन् कृते करिष्यति ।
    • यदि इन्जेक्ट्ड् पैरामीटर्स् युक्ताः बहुविधाः कन्स्ट्रक्टर् सन्ति तर्हि भवद्भिः उपयोगः करणीयः @Autowired कस्य कन्स्ट्रक्टर् इत्यस्य उपयोगः करणीयः इति स्पष्टतया निर्दिष्टुं annotation इति ।

नमूनासङ्केतः (बहुनिर्मातारः) २.

package com.example.demo.controller;

import com.example.demo.service.ISysUserService;
import com.example.demo.service.ISysRoleService;
import com.example.demo.service.ISysPostService;
import com.example.demo.service.ISysDeptService;
import com.example.demo.service.ISysUserPostService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/system/user")
public class SysUserController {

    private final ISysUserService userService;
    private final ISysRoleService roleService;
    private final ISysPostService postService;
    private final ISysDeptService deptService;
    private final ISysUserPostService userPostService;

    // 使用 @Autowired 明确指定使用哪个构造函数
    @Autowired
    public SysUserController(ISysUserService userService, 
                             ISysRoleService roleService, 
                             ISysPostService postService, 
                             ISysDeptService deptService, 
                             ISysUserPostService userPostService) {
        this.userService = userService;
        this.roleService = roleService;
        this.postService = postService;
        this.deptService = deptService;
        this.userPostService = userPostService;
    }

    // 另一个构造函数
    public SysUserController(ISysUserService userService) {
        this.userService = userService;
        this.roleService = null;
        this.postService = null;
        this.deptService = null;
        this.userPostService = null;
    }

    // 你的控制器方法
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

अस्मिन् उदाहरणे यतः बहुविधाः कन्स्ट्रक्टर् सन्ति, तस्मात् भवद्भिः उपयोगः करणीयः @Autowired Spring dependency injection कृते कस्य कन्स्ट्रक्टर् इत्यस्य उपयोगं करोति इति स्पष्टतया निर्दिष्टुं एनोटेशन्स् ।