見出し画像

【Springにおけるクラス名の意味合い】

Springでよく使用されるクラスの意味合いとその使われ方を示します。


Spring Frameworkでよく使われるクラスとその意味


1、Controllerクラス

意味合い:コントローラークラスは、ユーザーからのリクエストを受け取り、適切なレスポンスを返すための処理を担当します。
主に、webアプリケーションのUI層(プレゼンテーション層)を制御する役割を果たします。
使われ方:コントローラークラス内で、メソッドに@RequestMappingや@GetMappingなどのアノテーションを付与して、特定のURLパスに対する処理を定義します。ユーザーがwebブラウザから特定のURLにアクセスした際に、このクラス内の対応するメソッドが実行され、レスポンスが返されます。

簡単にいうと、ユーザーからのリクエストを受け取って、レスポンスを返す役割。WebページやAPIの入り口になるクラス。

@Controller
public class ExampleController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, World!");
        return "hello";
    }
}

2、Service クラス

意味合い:サービスクラスは、ビジネスロジックをカプセル化するために使用されます。ビジネス層(サービス層)に位置し、アプリケーションのコアとなる処理や計算、データ操作を行います。
使われ方:サービスクラス内で、データベースからのデータ取得や、複雑なビジエスロジックを実装し、それをコントローラーやhかのサービスクラスから呼び出して使用できます。

簡単にいうと、ビジネスロジックを実行するクラス。データ処理や計算などの実際の作業を担当。

@Service
public class ExampleService {

    public String processData() {
        // ビジネスロジックをここに実装
        return "Processed Data";
    }
}

3、Repository クラス


意味合い:
レポジトリクラスは、データアクセス層(DAO:Date Access Object)に位置し、データベースとの通信を担当します。Springでは、このクラスを使ってデータベース操作を抽象化します。
使われ方:レポジトリクラスでは、CRUD(Create, Read, Update, Delete)操作を実装し、データベースからのデータの取得や保存を行います。
Spring Data JPAと併用することで、さらにリポジトリクラスの作成を簡素化できます。

簡単にいうと、データベースとやり取りをするクラス。データの保存や取得を行う。

@Repository
public interface ExampleRepository extends JpaRepository<ExampleEntity, Long> {
    // Spring Data JPAを使用してリポジトリメソッドを定義
}

4、Configuration クラス

意味合い:コンフィグレーションクラスは、アプリケーション全体の設定やBeanの定義を行うために使用されます。SpringのコンテナにBeanを登録するためのJavaベースの設定ファイルとして機能します。
使われ方:アプリケーションで必要な設定や、特定のBeanの初期化を行い、Springの依存性注入(DI: Dependency Injection)を活用してクラス間の依存関係を管理します。

簡単にいうと、設定情報を管理するクラス。Beanを定義して、アプリケーション全体の設定をまとめる。

@Configuration
public class AppConfig {
    
    @Bean
    public ExampleService exampleService() {
        return new ExampleService();
    }
}

5、Component クラス

意味合い:コンポーネントクラスは、Springコンテナに登録する汎用的なBeanを定義するために使用されます。特に、特定の役割を持たないクラスをSpringに管理させたい場合に使用します。
使われ方:任意のクラスに @Component を付与することで、Springがそのクラスのインスタンスを管理し、他のクラスに依存性注入できるようになります。

簡単にいうと、汎用的なSpringの管理対象となるクラス。特定の機能を持つが、明確な役割に分類されないものに使う。

@Component
public class ExampleComponent {

    public String getComponentData() {
        return "Component Data";
    }
}

6、Beanクラス

意味合い:Beanクラスは、SpringのIoC(Inversion of Control)コンテナに管理されるオブジェクトです。アプリケーションのライフサイクルにおいて、依存関係の注入や設定が行われます。
使われ方:通常、@Configurationアノテーションでマークされたクラス内に@Beanアノテーションを付与して、特定のメソッドが返すオブジェクトをBeanとして登録します。

簡単にいうと、Springが管理するオブジェクト。コンテナが生成し、必要な場所に注入するもの。

@Configuration
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyService();
    }
}

7、DTOクラス

意味合い:DTOクラスは、データを転送するためのオブジェクトです。主に、プレゼンテーション層とビジネスロジック層の間でデータをやり取りする際に使用されます。
使われ方:DTOクラスは、データをまとめる役割を持ち、通常はフィールドにgetterおよびsetterを持ちます。

簡単にいうと、データのやり取りをするためのオブジェクト。入力データやレスポンスデータをまとめて扱う。

public class UserDTO {
    private String username;
    private String email;

    // ゲッターとセッター
    public String getUsername() { 
       return username;
   }
    public void setUsername(String username) { this.username = username; }
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
}

8、Entityクラス

意味合い:Entityクラスは、データベースのテーブルにマッピングされるオブジェクトです。ORM(Object-Relational Mapping)を用いて、データベース操作を簡素化します。
使われ方:JPAやHibernateを使用する際、@Entityアノテーションを付与して、クラスをデータベースのエンティティとしてマッピングします。

簡単にいうと、データベースのテーブルとマッピングするクラス。データベースのデータをオブジェクトとして表現する。

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    private Long id;
    private String username;
    private String email;

    // ゲッターとセッター
}

9、Enumsクラス

意味合い:Enumsクラスは、定数の集合を表現するために使用される列挙型です。特定の値の集合を扱う際に便利です。
使われ方:enumキーワードを使って定義し、他のクラスで使用することができます。

簡単にいうと、定数の集合を表す列挙型クラス。例えば、状態や種類など固定値を持つデータに使用する。

public enum UserRole {
    ADMIN,
    USER,
    GUEST
}

10、Exceptionクラス

意味合い:Exceptionクラスは、アプリケーションのエラーハンドリングを行うために使用されるカスタム例外を定義します。ビジネスロジックのエラーを表現するのに役立ちます。
使われ方:RuntimeExceptionを継承してカスタム例外を作成します。

簡単にいうと、エラーハンドリング用のクラス。アプリケーションで起きた特定のエラーを処理するために使う。

public class UserNotFoundException extends RuntimeException {
    public UserNotFoundException(String message) {
        super(message);
    }
}

11、Filterクラス

意味合い:Filterクラスは、HTTPリクエストおよびレスポンスの処理を行うためのコンポーネントです。リクエストの前後に特定の処理を追加できます。
使われ方:javax.servlet.Filterインターフェースを実装し、@Componentアノテーションを付与してフィルターを登録します。

簡単にいうと、リクエストやレスポンスに対して前処理や後処理を行うクラス。セキュリティやログ記録などに利用される。

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.springframework.stereotype.Component;

@Component
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // リクエスト処理
        chain.doFilter(request, response);
        // レスポンス処理
    }
}

12、Formクラス

意味合い:Formクラスは、Webアプリケーションにおけるフォームデータを保持するためのオブジェクトです。ユーザーが入力したデータを受け取るのに使用されます。
使われ方:DTOクラスと似ていますが、特にWebフォームのために設計されています。

簡単にいうと、ユーザーからの入力を保持するためのクラス。Webフォームのデータをまとめる。

public class UserForm {
    private String username;
    private String password;

    // ゲッターとセッター
}

13、Mapperクラス

意味合い:Mapperクラスは、データベースのクエリとオブジェクトのマッピングを行うために使用されます。主にMyBatisなどのORMフレームワークで使われます。
使われ方:インターフェースに@Mapperアノテーションを付与し、SQLマッピングを行います。

簡単にいうと、データベースのデータをオブジェクトに変換したり、逆にオブジェクトをデータベース形式に変換する役割。

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper {
    User findById(Long id);
}

14、Utilクラス

意味合い:Utilクラスは、再利用可能なユーティリティメソッドをまとめるためのクラスです。特定の機能に関する静的メソッドを提供します。
使われ方:全てのメソッドをstaticとして定義し、インスタンス化はしないのが一般的です。

簡単にいうと、よく使う処理や便利なメソッドを集めたクラス。共通の機能を再利用するために使用する。

public class StringUtil {
    public static String capitalize(String str) {
        if (str == null || str.isEmpty()) return str;
        return str.substring(0, 1).toUpperCase() + str.substring(1);
    }
}

15、Validatorクラス

意味合い:Validatorクラスは、入力データのバリデーションを行うためのクラスです。データの整合性を確認する役割を果たします。
使われ方:Springのバリデーション機能を使用して、カスタムバリデーションロジックを実装します。

簡単にいうと、データの妥当性をチェックするクラス。入力内容が正しいかを確認する。

import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

public class UserValidator implements Validator {
    @Override
    public boolean supports(Class<?> clazz) {
        return User.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        User user = (User) target;
        if (user.getUsername() == null || user.getUsername().isEmpty()) {
            errors.rejectValue("username", "username.empty", "Username must not be empty");
        }
    }
}

上記のクラスの持っている意味合いを理解し、効率的な製造をすることができるようになります。また、何がなんなのかがわからないという方はこちらを見て、理解することができれば少しでも効率的に製造できるようになるのではないでしょうか。

以上、クラスの持っている意味合いの紹介と使い方でした。

この記事が気に入ったらサポートをしてみませんか?