Spring Bootでよく使用するアノテーション入門
はじめに
Spring Bootでは、アノテーションを使用して様々な機能を実装します。この記事では、Spring Bootプロジェクトでよく使用するアノテーションと、その使用方法について説明します。
1. コアアノテーション
@SpringBootApplication
アプリケーションのメインクラスに付与するアノテーションです。以下の3つのアノテーションを組み合わせたものです:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Configuration
Springの設定クラスを示すアノテーションです。
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
@ComponentScan
コンポーネントをスキャンするベースパッケージを指定します。
@SpringBootApplication
@ComponentScan(basePackages = "com.example")
public class Application {
// ...
}
2. 依存性注入(DI)関連
@Autowired
依存性の自動注入を行います。
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
// コンストラクタインジェクション
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
@Qualifier
同じ型のBeanが複数ある場合に、特定のBeanを指定します。
@Service
public class UserService {
@Autowired
@Qualifier("jdbcUserRepository")
private UserRepository userRepository;
}
@Value
プロパティファイルの値を注入します。
@Service
public class EmailService {
@Value("${mail.host}")
private String mailHost;
@Value("${mail.port}")
private int mailPort;
}
3. Web関連
@Controller
Webコントローラーを示すアノテーションです。
@Controller
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public String getUser(@PathVariable Long id) {
// ...
}
}
@RestController
RESTful APIのコントローラーを示すアノテーションです。
@RestController
@RequestMapping("/api/users")
public class UserRestController {
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
// ...
}
}
@RequestMapping
URLマッピングを定義します。
@RestController
@RequestMapping("/api/v1")
public class UserController {
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<User> getUsers() {
// ...
}
}
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping
HTTPメソッドごとのマッピングを定義します。
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
// ...
}
@PostMapping
public User createUser(@RequestBody User user) {
// ...
}
@PutMapping("/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
// ...
}
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
// ...
}
}
4. データアクセス関連
@Repository
データアクセス層のコンポーネントを示すアノテーションです。
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// ...
}
@Transactional
トランザクション管理を行います。
@Service
public class UserService {
@Transactional
public void createUser(User user) {
// ...
}
@Transactional(readOnly = true)
public User getUser(Long id) {
// ...
}
}
5. バリデーション関連
@Valid
Bean Validationを有効にします。
@RestController
public class UserController {
@PostMapping("/users")
public User createUser(@Valid @RequestBody User user) {
// ...
}
}
@NotNull, @Size, @Email など
フィールドのバリデーションルールを定義します。
public class User {
@NotNull
private Long id;
@Size(min = 2, max = 50)
private String name;
@Email
private String email;
}
6. セキュリティ関連
@Secured
メソッドレベルのセキュリティを定義します。
@Service
public class UserService {
@Secured("ROLE_ADMIN")
public void deleteUser(Long id) {
// ...
}
}
@PreAuthorize
メソッド実行前の認可チェックを行います。
@Service
public class UserService {
@PreAuthorize("hasRole('ADMIN')")
public void updateUser(User user) {
// ...
}
}
7. テスト関連
@SpringBootTest
Spring Bootの統合テストを示すアノテーションです。
@SpringBootTest
class UserServiceTest {
@Autowired
private UserService userService;
@Test
void testCreateUser() {
// ...
}
}
@MockBean
モックオブジェクトを定義します。
@SpringBootTest
class UserServiceTest {
@MockBean
private UserRepository userRepository;
@Autowired
private UserService userService;
}
まとめ
この記事では、Spring Bootでよく使用するアノテーションについて説明しました。主なポイントは以下の通りです:
- コアアノテーション
- 依存性注入関連
- Web関連
- データアクセス関連
- バリデーション関連
- セキュリティ関連
- テスト関連
これらのアノテーションを適切に使用することで、効率的な開発が可能になります。