1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Spring Bootでよく使用するアノテーション入門

Posted at

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でよく使用するアノテーションについて説明しました。主なポイントは以下の通りです:

  1. コアアノテーション
  2. 依存性注入関連
  3. Web関連
  4. データアクセス関連
  5. バリデーション関連
  6. セキュリティ関連
  7. テスト関連

これらのアノテーションを適切に使用することで、効率的な開発が可能になります。

参考資料

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?