diff --git a/entity_reference_display.module b/entity_reference_display.module
index 6f53db4..f5936ae 100644
--- a/entity_reference_display.module
+++ b/entity_reference_display.module
@@ -4,7 +4,8 @@
  * @file
  * Entity Reference Display module.
  */
-
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\entity_reference_display\Hook\EntityReferenceDisplayHooks;
 use Drupal\Component\Utility\Html;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\entity_reference_display\Plugin\Field\FieldFormatter\EntityReferenceRevisionsDisplayFormatter;
@@ -12,16 +13,18 @@ use Drupal\entity_reference_display\Plugin\Field\FieldFormatter\EntityReferenceR
 /**
  * Implements hook_form_FORM_ID_alter().
  */
+#[LegacyHook]
 function entity_reference_display_form_field_storage_config_edit_form_alter(&$form, FormStateInterface $form_state) {
-  entity_reference_display_disable_cardinality_settings($form['cardinality_container'], $form_state);
+  \Drupal::service(EntityReferenceDisplayHooks::class)->formFieldStorageConfigEditFormAlter($form, $form_state);
 }
 
 /**
  * Implements hook_form_FORM_ID_alter().
  */
-function entity_reference_display_form_field_config_edit_form_alter(&$form, FormStateInterface $form_state) {
-  $cardinality_container = $form['field_storage']['subform']['cardinality_container'] ?? [];
-  entity_reference_display_disable_cardinality_settings($cardinality_container, $form_state);
+#[LegacyHook]
+function entity_reference_display_form_field_config_edit_form_alter(&$form, FormStateInterface $form_state)
+{
+    \Drupal::service(EntityReferenceDisplayHooks::class)->formFieldConfigEditFormAlter($form, $form_state);
 }
 
 /**
@@ -44,38 +47,26 @@ function entity_reference_display_disable_cardinality_settings(array &$cardinali
 /**
  * Implements hook_field_widget_info_alter().
  */
+#[LegacyHook]
 function entity_reference_display_field_widget_info_alter(array &$info) {
-  // Allow to use the same widgets as list_string field type.
-  entity_reference_display_set_available_plugins($info);
+  \Drupal::service(EntityReferenceDisplayHooks::class)->fieldWidgetInfoAlter($info);
 }
 
 /**
  * Implements hook_field_formatter_info_alter().
  */
-function entity_reference_display_field_formatter_info_alter(array &$info) {
-  // Allow to use the same formatters as list_string field type.
-  entity_reference_display_set_available_plugins($info);
-
-  // Replace default formatter when revisions are supported.
-  if (\Drupal::moduleHandler()->moduleExists('entity_reference_revisions')) {
-    $info['entity_reference_display_default']['class'] = EntityReferenceRevisionsDisplayFormatter::class;
-  }
+#[LegacyHook]
+function entity_reference_display_field_formatter_info_alter(array &$info)
+{
+    \Drupal::service(EntityReferenceDisplayHooks::class)->fieldFormatterInfoAlter($info);
 }
 
 /**
  * Implements hook_preprocess_HOOK().
  */
+#[LegacyHook]
 function entity_reference_display_preprocess_field(&$variables) {
-  // Only for selected display mode formatter.
-  if (isset($variables['element']['#formatter'])
-    && $variables['element']['#formatter'] === 'entity_reference_display_default'
-  ) {
-    // Add display mode class for field wrapper.
-    if (!empty($variables['element'][0]['#view_mode'])) {
-      $class = 'erd-list--' . $variables['element'][0]['#view_mode'];
-      $variables['attributes']['class'][] = Html::getClass($class);
-    }
-  }
+  \Drupal::service(EntityReferenceDisplayHooks::class)->preprocessField($variables);
 }
 
 /**
diff --git a/entity_reference_display.services.yml b/entity_reference_display.services.yml
new file mode 100644
index 0000000..04cdb2c
--- /dev/null
+++ b/entity_reference_display.services.yml
@@ -0,0 +1,5 @@
+
+services:
+  Drupal\entity_reference_display\Hook\EntityReferenceDisplayHooks:
+    class: Drupal\entity_reference_display\Hook\EntityReferenceDisplayHooks
+    autowire: true
diff --git a/src/Hook/EntityReferenceDisplayHooks.php b/src/Hook/EntityReferenceDisplayHooks.php
new file mode 100644
index 0000000..7afb1fc
--- /dev/null
+++ b/src/Hook/EntityReferenceDisplayHooks.php
@@ -0,0 +1,69 @@
+<?php
+
+namespace Drupal\entity_reference_display\Hook;
+
+use Drupal\Component\Utility\Html;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\entity_reference_display\Plugin\Field\FieldFormatter\EntityReferenceRevisionsDisplayFormatter;
+use Drupal\Core\Hook\Attribute\Hook;
+/**
+ * Hook implementations for entity_reference_display.
+ */
+class EntityReferenceDisplayHooks
+{
+    /**
+     * Implements hook_form_FORM_ID_alter().
+     */
+    #[Hook('form_field_storage_config_edit_form_alter')]
+    public static function formFieldStorageConfigEditFormAlter(&$form, \Drupal\Core\Form\FormStateInterface $form_state)
+    {
+        entity_reference_display_disable_cardinality_settings($form['cardinality_container'], $form_state);
+    }
+    /**
+     * Implements hook_form_FORM_ID_alter().
+     */
+    #[Hook('form_field_config_edit_form_alter')]
+    public static function formFieldConfigEditFormAlter(&$form, \Drupal\Core\Form\FormStateInterface $form_state)
+    {
+        $cardinality_container = $form['field_storage']['subform']['cardinality_container'] ?? [
+        ];
+        entity_reference_display_disable_cardinality_settings($cardinality_container, $form_state);
+    }
+    /**
+     * Implements hook_field_widget_info_alter().
+     */
+    #[Hook('field_widget_info_alter')]
+    public static function fieldWidgetInfoAlter(array &$info)
+    {
+        // Allow to use the same widgets as list_string field type.
+        entity_reference_display_set_available_plugins($info);
+    }
+    /**
+     * Implements hook_field_formatter_info_alter().
+     */
+    #[Hook('field_formatter_info_alter')]
+    public static function fieldFormatterInfoAlter(array &$info)
+    {
+        // Allow to use the same formatters as list_string field type.
+        entity_reference_display_set_available_plugins($info);
+        // Replace default formatter when revisions are supported.
+        if (\Drupal::moduleHandler()->moduleExists('entity_reference_revisions')) {
+            $info['entity_reference_display_default']['class'] = \Drupal\entity_reference_display\Plugin\Field\FieldFormatter\EntityReferenceRevisionsDisplayFormatter::class;
+        }
+    }
+    /**
+     * Implements hook_preprocess_HOOK().
+     */
+    #[Hook('preprocess_field')]
+    public static function preprocessField(&$variables)
+    {
+        // Only for selected display mode formatter.
+        if (isset($variables['element']['#formatter']) && $variables['element']['#formatter'] === 'entity_reference_display_default') {
+            // Add display mode class for field wrapper.
+            if (!empty($variables['element'][0]['#view_mode'])) {
+                $class = 'erd-list--' . $variables['element'][0]['#view_mode'];
+                $variables['attributes']['class'][] = \Drupal\Component\Utility\Html::getClass($class);
+            }
+        }
+    }
+}
