diff --git a/admin_dialogs.module b/admin_dialogs.module
index a2d2b2a..a8b51c6 100644
--- a/admin_dialogs.module
+++ b/admin_dialogs.module
@@ -1,5 +1,7 @@
 <?php
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\admin_dialogs\Hook\AdminDialogsHooks;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Cache\RefinableCacheableDependencyInterface;
@@ -9,62 +11,71 @@ use Drupal\views_ui\ViewUI;
 /**
  * Implements hook_form_alter().
  */
+#[LegacyHook]
 function admin_dialogs_form_alter(&$form, FormStateInterface $form_state, $form_id) {
-  \Drupal::service('admin_dialogs.module')->form_alter($form, $form_state, $form_id);
+  \Drupal::service(AdminDialogsHooks::class)->formAlter($form, $form_state, $form_id);
 }
 
 /**
  * Implements hook_entity_operation_alter().
  */
+#[LegacyHook]
 function admin_dialogs_entity_operation_alter(array &$operations, EntityInterface $entity) {
-  \Drupal::service('admin_dialogs.module')->entity_operation_alter($operations, $entity);
+  \Drupal::service(AdminDialogsHooks::class)->entityOperationAlter($operations, $entity);
 }
 
 /**
  * Implements hook_menu_local_tasks_alter().
  */
+#[LegacyHook]
 function admin_dialogs_menu_local_tasks_alter(&$data, $route_name, RefinableCacheableDependencyInterface &$cacheability) {
-  \Drupal::service('admin_dialogs.module')->menu_local_tasks_alter($data, $route_name, $cacheability);
+  \Drupal::service(AdminDialogsHooks::class)->menuLocalTasksAlter($data, $route_name, $cacheability);
 }
 
 /**
  * Implements hook_menu_local_actions_alter().
  */
+#[LegacyHook]
 function admin_dialogs_menu_local_actions_alter(&$local_actions) {
-  \Drupal::service('admin_dialogs.module')->menu_local_actions_alter($local_actions);
+  \Drupal::service(AdminDialogsHooks::class)->menuLocalActionsAlter($local_actions);
 }
 
 /**
  * Implements hook_entity_type_build().
  */
+#[LegacyHook]
 function admin_dialogs_entity_type_build(array &$entity_types) {
-  \Drupal::service('admin_dialogs.module')->entity_type_build($entity_types);
+  \Drupal::service(AdminDialogsHooks::class)->entityTypeBuild($entity_types);
 }
 
 /**
  * Implements hook_page_attachments().
  */
+#[LegacyHook]
 function admin_dialogs_page_attachments(array &$attachments) {
-  \Drupal::service('admin_dialogs.module')->page_attachments($attachments);
+  \Drupal::service(AdminDialogsHooks::class)->pageAttachments($attachments);
 }
 
 /**
  * Implements hook_views_ui_display_top_links_alter().
  */
+#[LegacyHook]
 function admin_dialogs_views_ui_display_top_links_alter(&$links, ViewUI $view, $display_id) {
-  \Drupal::service('admin_dialogs.module')->views_ui_display_top_links($links, $view, $display_id);
+  \Drupal::service(AdminDialogsHooks::class)->viewsUiDisplayTopLinksAlter($links, $view, $display_id);
 }
 
 /**
  * Implements hook_theme().
  */
+#[LegacyHook]
 function admin_dialogs_theme() {
-  return \Drupal::service('admin_dialogs.module')->theme();
+  return \Drupal::service(AdminDialogsHooks::class)->theme();
 }
 
 /**
  * Implements hook_help().
  */
+#[LegacyHook]
 function admin_dialogs_help($route_name, RouteMatchInterface $route_match) {
-  return \Drupal::service('admin_dialogs.module')->help($route_name, $route_match);
+  return \Drupal::service(AdminDialogsHooks::class)->help($route_name, $route_match);
 }
diff --git a/admin_dialogs.services.yml b/admin_dialogs.services.yml
index 082ef0e..890b765 100644
--- a/admin_dialogs.services.yml
+++ b/admin_dialogs.services.yml
@@ -2,3 +2,7 @@ services:
   admin_dialogs.module:
     class: Drupal\admin_dialogs\AdminDialogsModule
     arguments: ['@entity_type.manager', '@config.factory']
+
+  Drupal\admin_dialogs\Hook\AdminDialogsHooks:
+    class: Drupal\admin_dialogs\Hook\AdminDialogsHooks
+    autowire: true
diff --git a/src/Hook/AdminDialogsHooks.php b/src/Hook/AdminDialogsHooks.php
new file mode 100644
index 0000000..c65e26d
--- /dev/null
+++ b/src/Hook/AdminDialogsHooks.php
@@ -0,0 +1,88 @@
+<?php
+
+namespace Drupal\admin_dialogs\Hook;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Cache\RefinableCacheableDependencyInterface;
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\views_ui\ViewUI;
+use Drupal\Core\Hook\Attribute\Hook;
+/**
+ * Hook implementations for admin_dialogs.
+ */
+class AdminDialogsHooks
+{
+    /**
+     * Implements hook_form_alter().
+     */
+    #[Hook('form_alter')]
+    public function formAlter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id)
+    {
+        \Drupal::service('admin_dialogs.module')->form_alter($form, $form_state, $form_id);
+    }
+    /**
+     * Implements hook_entity_operation_alter().
+     */
+    #[Hook('entity_operation_alter')]
+    public function entityOperationAlter(array &$operations, \Drupal\Core\Entity\EntityInterface $entity)
+    {
+        \Drupal::service('admin_dialogs.module')->entity_operation_alter($operations, $entity);
+    }
+    /**
+     * Implements hook_menu_local_tasks_alter().
+     */
+    #[Hook('menu_local_tasks_alter')]
+    public function menuLocalTasksAlter(&$data, $route_name, \Drupal\Core\Cache\RefinableCacheableDependencyInterface &$cacheability)
+    {
+        \Drupal::service('admin_dialogs.module')->menu_local_tasks_alter($data, $route_name, $cacheability);
+    }
+    /**
+     * Implements hook_menu_local_actions_alter().
+     */
+    #[Hook('menu_local_actions_alter')]
+    public function menuLocalActionsAlter(&$local_actions)
+    {
+        \Drupal::service('admin_dialogs.module')->menu_local_actions_alter($local_actions);
+    }
+    /**
+     * Implements hook_entity_type_build().
+     */
+    #[Hook('entity_type_build')]
+    public function entityTypeBuild(array &$entity_types)
+    {
+        \Drupal::service('admin_dialogs.module')->entity_type_build($entity_types);
+    }
+    /**
+     * Implements hook_page_attachments().
+     */
+    #[Hook('page_attachments')]
+    public function pageAttachments(array &$attachments)
+    {
+        \Drupal::service('admin_dialogs.module')->page_attachments($attachments);
+    }
+    /**
+     * Implements hook_views_ui_display_top_links_alter().
+     */
+    #[Hook('views_ui_display_top_links_alter')]
+    public function viewsUiDisplayTopLinksAlter(&$links, \Drupal\views_ui\ViewUI $view, $display_id)
+    {
+        \Drupal::service('admin_dialogs.module')->views_ui_display_top_links($links, $view, $display_id);
+    }
+    /**
+     * Implements hook_theme().
+     */
+    #[Hook('theme')]
+    public function theme()
+    {
+        return \Drupal::service('admin_dialogs.module')->theme();
+    }
+    /**
+     * Implements hook_help().
+     */
+    #[Hook('help')]
+    public function help($route_name, \Drupal\Core\Routing\RouteMatchInterface $route_match)
+    {
+        return \Drupal::service('admin_dialogs.module')->help($route_name, $route_match);
+    }
+}
