【springにおけるアノテーションの紹介】
springでは、多くのアノテーションが提供されております。
これらを使うことで簡潔で柔軟なコードを記述できるようになります。
springでよく使用されるアノテーションについて、基本的な使い方と役割を紹介します。
1、@Controller
役割:コントローラーを定義するためのアノテーションです。WEBリクエストを受け取り、適切な処理を行います。
使い方:クラスに付与して、WEBアプリケーションのエントリーポイントとして使用します。
@Controller
public class MyController {
@GetMapping("/home")
public String home() {
return "home"; // home.htmlにフォワード
}
}
2、@RestController
役割:@Controllerと似ていますが、@ResponseBodyが自動的に付与されます。主にREST APIを作成する時に使用され、メソッドの戻り値はそのままHTTPレスポンスとして返されます。
使い方:REST APIのエンドポイントを定義するクラスに使用します。
@RestController
public class ApiController {
@GetMapping("/api/data")
public Data getData() {
return new Data("Sample Data");
}
}
3、@Service
役割:ビジネスロジックを実装するサービスクラスに使用します。このアノテーションを付与することで、Springが自動的にDI(依存性注入)対象として認識します。
使い方:サービス層にあたるクラスにつけます。
@Service
public class MyService {
public String processData() {
return "Processed Data";
}
}
4、@Repository
役割:データアクセスを担当するクラスに使用され、特にデータベースとのやり取りを行うクラスに付与されます。このアノテーションにより、Springが自動的に例外をDataAccessExceptionに変換します。
使い方:DAO(Data Access Object)クラスに使用します。
@Repository
public class MyRepository {
public List<Data> findAll() {
// データベース処理
return new ArrayList<>();
}
}
5、@Conponent
役割:Springが管理する一般的なBeanクラスを定義する際に使用されます。特に役割を特定しないクラスに付与され、@Controller, @Service, @Repositoryのスーパークラス的な存在です。
使い方:特定の役割がないBeanとして管理したいクラスにつけます。
@Component
public class MyComponent {
public void execute() {
System.out.println("Component Executed");
}
}
6、@Autowired
役割:SpringのDI機能を利用して、Beanを自動的に注入します。コンストラクタ、フィールド、セッターなどに使用できます。
使い方:依存するオブジェクトのフィールドやメソッドに付与します。
@Service
public class MyService {
private final MyRepository repository;
@Autowired
public MyService(MyRepository repository) {
this.repository = repository;
}
}
7、@Qualifier
役割:@Autowiredで複数のBeanが候補として存在する場合に、特定のBeanを指定するために使用します。
使い方:Bean名を指定して注入したい場合に使用します。
@Service
public class MyService {
@Autowired
@Qualifier("specialRepository")
private MyRepository repository;
}
8、@Configuration
役割:Beanの定義を行うクラスに付与します。このアノテーションが付いたクラスは、Springの設定クラスとして扱われます。
使い方:Beanを手動で登録したいときや設定を行いたいクラスに付けます。
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyService();
}
}
9、@Bean
役割:Springコンテナに手動でBeanを登録する際に使用されます。
使い方:@Configurationクラス内でBeanを定義するときに使用します。
@Configuration
public class AppConfig {
@Bean
public MyRepository myRepository() {
return new MyRepository();
}
}
10、@Transactional
役割:ランザクション管理を行うためのアノテーションです。データベースの操作が複数含まれるメソッドに対して、トランザクションを一括管理するために使用されます。
使い方:データ操作が伴うメソッドやクラスに付与します。
@Service
public class MyService {
@Transactional
public void performDatabaseOperation() {
// データベース操作
}
}
11、@RequestMapping
役割:Webリクエストを処理するメソッドやクラスにマッピングするために使用されます。@GetMapping, @PostMappingなどの具体的なアノテーションの基礎となるものです。
使い方:WebリクエストのURLやHTTPメソッドを指定します。
@Controller
@RequestMapping("/app")
public class MyController {
@RequestMapping(value = "/home", method = RequestMethod.GET)
public String home() {
return "home";
}
}
12、@ModelAttribute
役割:モデルオブジェクトをメソッドにバインドするためのアノテーションです。主にWEBアプリケーションでリクエストパラメータをオブジェクトに変換する際に使用します。
使い方:コントローラーメソッドの引数に付与して、HTTPリクエストからデータを受け取ります。
@Controller
public class MyController {
@PostMapping("/submit")
public String submitForm(@ModelAttribute MyForm form) {
// formオブジェクトにリクエストパラメータがバインドされる
return "success";
}
}
13、@Validated
役割:Bean Validationを利用してオブジェクトのバリデーションを行うためのアノテーションです。主にSpring MVCやSpring Bootでのリクエストデータの検証に使用されます。
使い方:メソッド引数やクラスに付与して、バリデーションの適用を示します。
@Controller
public class MyController {
@PostMapping("/submit")
public String submitForm(@Validated @ModelAttribute MyForm form) {
// バリデーションが自動的に行われる
return "success";
}
}
14、@Valid
役割:Bean Validationを利用してオブジェクトのバリデーションを行うためのアノテーションです。主にSpring MVCやSpring Bootでのリクエストデータの検証に使用されます。
使い方:メソッド引数やクラスに付与して、バリデーションの適用を示します。
@Controller
public class MyController {
@PostMapping("/submit")
public String submitForm(@Validated @ModelAttribute MyForm form) {
// バリデーションが自動的に行われる
return "success";
}
}
15、@RequestParam
役割:HTTPリクエストのパラメータをメソッドの引数にバインドするために使用されます。特にGETリクエストのクエリパラメータやPOSTリクエストのフォームパラメータを受け取る際に役立ちます。
使い方:コントローラーメソッドの引数に付与します。
@Controller
public class MyController {
@GetMapping("/greet")
public String greet(@RequestParam String name) {
return "Hello, " + name;
}
}
16、@Data
役割:Lombokライブラリから提供されるアノテーションで、ゲッター、セッター、toString(), equals(), hashCode()メソッドを自動生成します。データクラスに使われることが多いです。
使い方:クラスに付与して、冗長なコードを削減します。
import lombok.Data;
@Data
public class User {
private String username;
private String password;
}
17、@EqualsAndHashCode
役割:Lombokライブラリのアノテーションで、equals()およびhashCode()メソッドを自動生成します。主にコレクションの比較やハッシュベースのコレクションに使います。
使い方:クラスに付与して、オブジェクトの等価性を定義します。
import lombok.Data;
@Data
public class User {
private String username;
private String password;
}
18、@SessionScope
役割:SpringでBeanのスコープをセッション単位に設定します。セッションごとに異なるインスタンスが作成されるため、ユーザーごとに状態を保持する際に使用されます。
使い方:クラスに付与します。
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
@Scope("session")
public class UserSession {
private String username;
}
19、@Order
役割:Springにおけるコンポーネントの実行順序を指定するためのアノテーションです。特にフィルターやインターセプターなどの順序を定義するのに役立ちます。
使い方:クラスやメソッドに付与して、実行順序を指定します。
import org.springframework.core.annotation.Order;
@Order(1)
@Component
public class FirstFilter implements Filter {
// フィルターの実装
}
@Order(2)
@Component
public class SecondFilter implements Filter {
// フィルターの実装
}
19、@Mapper
役割:MyBatisや他のORMライブラリで、データベースとのマッピングを行うインターフェースに付与されます。SQLマッピングを簡潔に定義できます。
使い方:Mapperインターフェースに付与します。
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper {
User findById(Long id);
}
これらのアノテーションは、Springを使った開発において非常に便利になってくるので、それぞれのアノテーションの特性を理解し、適切に活用することで、より効率的なアプリケーション開発が可能になります。