私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
@RequiredArgsConstructor はコンストラクター インジェクションを実装します
@Autowired
そして@Resource
注釈@Autowired
@Autowired
これは Spring フレームワークによって提供されるアノテーションであり、依存関係を自動的にアセンブルするために使用されます。@Autowired
private ISysUserService userService;
@Resource
@Resource
これは Java EE によって提供されるアノテーションであり、Spring も依存関係の自動アセンブリのためにこれをサポートしています。@Resource
private ISysUserService userService;
@RequiredArgsConstructor
@RequiredArgsConstructor
Lombok によって提供されるアノテーションであり、すべてのアノテーションが自動的に生成されます。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 字段
}
@Autowired
そして@Resource
)@RequiredArgsConstructor
この負担は軽減できます。@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;
// 其他代码
}
@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;
// 其他代码
}
このコンストラクターインジェクションの手法により、コードの堅牢性や保守性が向上するだけでなく、Spring の依存性インジェクション機能や Lombok の簡素化されたコードの利点も活用できます。
Spring のコンストラクター インジェクション_spring コンストラクター インジェクション-CSDN ブログ
コンストラクター インジェクションを使用する場合、追加のアノテーションを追加する必要はなく、コンストラクターを提供するだけで済みます。 Spring はコンストラクターを自動的に検出し、依存関係の注入を実行します。
@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;
}
}
サンプルコード
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;
}
// 你的控制器方法
}
この例では、コンストラクターに注釈を付けるために追加の注釈を使用する必要はなく、Spring が自動的に依存関係を識別して注入します。 (もちろんマークしてもエラーは報告されませんが、使用できるのは@Autowiredのみで、@Resouceは使用できません。@Resource
アノテーションは通常、フィールドまたはセッター メソッドの注入に使用されます)
@Autowired
アノテーションを使用して、使用するコンストラクターを明示的に指定します。サンプルコード (複数のコンストラクター)
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;
}
// 你的控制器方法
}
この例では、複数のコンストラクターがあるため、次を使用する必要があります。 @Autowired
Spring が依存関係の注入にどのコンストラクターを使用するかを明示的に指定するためのアノテーション。