Весенние аннотации: подробное объяснение @Repository!
Весенние аннотации: подробное объяснение @Repository!

Предисловие

В корпоративной разработке Java,Сохранение данных является основной проблемой. Платформа Spring предоставляет богатый набор абстракций доступа к данным.,Позволяет разработчикам больше сосредоточиться на реализации бизнес-логики.。@RepositoryАннотацияSpringОсобый тип@Componentаннотация,Специально для уровня доступа к данным,То есть DAO (Data Access Object)компоненты。В этой статье будет подробно рассмотрено@Repositoryаннотацияизиспользоватьметод、Анализ исходного код, примеры практического применения и анализ преимуществ и недостатки, чтобы помочь разработчикам лучше понять и использовать эту аннотацию.

краткое содержание

@RepositoryАннотацияSpringрамкасередина Используется для идентификации компонентов уровня доступа к данным.изаннотация。Он не только обеспечивает@Componentаннотацияиз Все функции,Также добавлена ​​обработка исключений, связанных с доступом к данным.。Используя@Repository,Контейнер Spring может идентифицировать компоненты DAO и управлять ими.,В то же время он автоматически преобразует проверенные исключения в непроверяемые исключения.,Упрощенная обработка исключений на уровне доступа к данным.

Обзор

@RepositoryАннотацияодин для маркировкидобрыйдляSpringКомпоненты управляемого доступа к даннымизаннотация。и@Componentдругой,это Специально для уровня доступа к данным,Обеспечивает дополнительную поддержку работы с базой данных.。использовать@Repositoryаннотацияиздобрый Источники данных могут быть автоматически добавлены,И иметь возможность использовать возможности управления транзакциями Spring.

Анализ исходного кода

@Repositoryаннотацияиз Исходный коднравиться Вниз:

Язык кода:java
копировать
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
@Component
public @interface Repository {
    @AliasFor(annotation = Component.class)
    String value() default "";
}

Это видно из исходного кода,@Repositoryунаследованный@Componentаннотацияизвсесвойствои行для,и добавил@Repositoryуникальныйизаннотациялогика обработки。этопроходить@AliasForаннотацияпредоставили@ComponentТакой жеvalueсвойство。

Обмен вариантами использования

Вот простой пример использования,выставканравитьсячтоиспользовать@Repositoryаннотациябудетдобрый注册дляSpringКомпоненты управляемого доступа к данным:

Язык кода:java
копировать
@Repository
public class UserRepository {
    public User findUserById(Long id) {
        // Логика запроса к базе данных
        return new User(id, "John Doe");
    }
}

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User getUser(Long id) {
        return userRepository.findUserById(id);
    }
}

В этом примере,UserRepositoryурок пройден@Repositoryаннотация被отметкадля一个SpringКомпоненты управляемого доступа к данным。UserServiceурок пройден@Autowiredаннотация Автоматически вводитсяUserRepositoryПример,и вызвать его методы.

Что касается приведенного выше примера кода, здесь я дам вам подробный анализ кода, который поможет вам понять его более тщательно и помочь вам освоить его как можно скорее.

Этот код показывает, какSpringрамкасерединаиспользовать@Repositoryи@Serviceаннотациядля достижения доступа к даннымибизнес-логикаизслоистый。Вот подробное объяснение этого кода:

Класс UserRepository

Язык кода:java
копировать
@Repository
public class UserRepository {
    public User findUserById(Long id) {
        // Логика запроса к базе данных
        return new User(id, "John Doe");
    }
}
  1. @Репозиторий аннотацияUserRepositoryурок пройден@Repositoryаннотация被отметкадля一个SpringКомпоненты управляемого доступа к данным。это означаетSpringКонтейнер будет рассматривать его какBeanУправлять,И обеспечить соответствующую поддержку доступа к данным.
  2. метод findUserById:Этот метод имитирует процесс извлечения данных из базы данных на основе действий пользователя.IDЛогика запроса информации о пользователе。в практическом применении,Может содержать код доступа к базе данных.,Например, используя JDBC или JPA для запросов.

Класс UserService

Язык кода:java
копировать
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User getUser(Long id) {
        return userRepository.findUserById(id);
    }
}
  1. аннотация @ServiceUserServiceурок пройден@Serviceаннотация被отметкадля一个SpringУправляемые сервисные компоненты。Обычно это используется для инкапсуляции бизнес-логики.。
  2. @Автоматическая аннотация@Autowiredаннотациядля автоматического впрыскаUserRepositoryПример。SpringКонтейнер автоматически найдет и внедрит соответствующийBean。
  3. метод getUser:Этот метод инкапсулирует бизнес-логику получения информации о пользователе.。этопроходитьвызовUserRepositoryизfindUserByIdМетод получения информации о пользователе。

Сценарии использования

Этот шаблон многоуровневого проектирования очень распространен в корпоративных приложениях и помогает достичь следующих целей:

  • развязка:Поместите логику доступа к даннымибизнес-логика分离,Уменьшите связанность кода.
  • ремонтопригодность:Только каждый слойсосредоточиться на свою ответственность сделать код легче поддерживать и расширять.
  • тест:Каждый уровень может выполнять блоки независимотест,Улучшите охват и надежность теста.

тестовый пример

К приведенному выше тестовому коду вы можете написать тестовый пример следующим образом:

Язык кода:java
копировать
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.scan("com.example");
        context.refresh();

        UserService userService = context.getBean(UserService.class);
        User user = userService.getUser(1L);
        System.out.println("User: " + user.getName());
    }
}
  1. Создать контекст приложения Spring:проходитьAnnotationConfigApplicationContextкласс создаетSpringконтекст приложения,и просканировал указанный путь к пакету.
  2. GetBean:отSpringПолучить из контейнераUserServiceПример。
  3. Выполнять бизнес-логику:вызовUserServiceизgetUserметод,И распечатываем полученную информацию о пользователе.

На что следует обратить внимание

  • убеждатьсяcom.exampleесть в пакетеUserRepositoryиUserServiceдобрый,И они правильно отмечены как Spring beans.
  • в практическом применении,UserRepositoryизfindUserByIdметоддолжен содержать актуальныеиз Логика запроса к базе данных。
  • тестовый примерсерединаизUser.getName()методгипотезаUserдобрыйесть одинgetNameметодвернуть пользователяизимя。убеждатьсяUserдобрыйсоответствующийизвыполнить。

Таким образом, разработчики могут четко организовать код и улучшить его сопровождаемость и тестируемость.

Сценарии применения

@Repositoryаннотация Может применяться к различным сценариям доступа к данным.,Например:

  1. Доступ к реляционной базе данных:Теги для работы с реляционными базами данныхизDAOдобрый。
  2. Нет Доступ к реляционной базе данных:Помечено к действию Нетреляционная база данныхизDAOдобрый。
  3. Операции с очередью сообщений:Помечено к действию消息队列компоненты。

Анализ преимуществ и недостатков

преимущество

  1. Упрощение обработки исключений:自动转换Проверенное исключениедля Нет Проверенное исключение,Упрощенная логика обработки исключений.
  2. Поддержка управления транзакциями:иSpringиз Бесшовная интеграция управления транзакциями,Упрощенная настройка и управление транзакциями.
  3. Четкое разделение обязанностей:проходить@Repositoryаннотация,Между уровнем доступа к данным и другими компонентами бизнес-уровня проводится четкое различие.

недостаток

  1. может вызвать недоразумение:Для тех, кто не знаком сSpringаннотацияиз Разработчик,можно принять за@RepositoryТолько для доступа к базе данных,При этом игнорируется тот факт, что его также можно использовать для других типов доступа к данным.
  2. Чрезмерное использование аннотаций:и@Componentаннотациядобрыйпохожий,Чрезмерное использование аннотации могут снизить читаемость кода.

Введение в основные методы класса

@Repositoryаннотацияизосновнойдобрыйдаorg.springframework.stereotype.Repository。этотдобрый Определены компоненты доступа к даннымиз Базовыйсвойствои行для。以Внизда一些关键метод:

  • @Repository:отметкадобрыйдляSpringКомпоненты управляемого доступа к данным。
  • @Transactional:Используется для объявления управления транзакциямиизметодилидобрый。

тестовый пример

Ниже приведен простой тест пример,выставканравитьсячтопроходитьmainфункциятест@Repositoryаннотациякомпоненты:

Язык кода:java
копировать
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.scan("com.example");
        context.refresh();

        UserService userService = context.getBean(UserService.class);
        User user = userService.getUser(1L);
        System.out.println("User: " + user.getName());
    }
}

В этом тесте примерсередина,проходитьAnnotationConfigApplicationContextкласс создаетSpringконтекст приложения,и просканировал указанный путь к пакету.Затемот上Вниз文середина ПолучилUserServiceПример,И вызывайте его методы для получения информации о пользователе.

Что касается приведенного выше примера кода, здесь я дам вам подробный анализ кода, который поможет вам понять его более тщательно и помочь вам освоить его как можно скорее.

Этот код является точкой входа типичного приложения Spring. Он демонстрирует, как использовать функцию настройки аннотаций среды Spring для инициализации контекста приложения, получения компонентов уровня службы и вызова его методов. Ниже приводится подробное объяснение и анализ этого кода:

Анализ кода

  1. Импорт Аннотатионконфигаппликатионконтекст:import org.springframework.context.annotation.AnnotationConfigApplicationContext;Эта строка кода импортируетSpringизAnnotationConfigApplicationContextдобрый,Это класс, используемый для настройки контейнера Spring с помощью аннотаций.
  2. Определить основной класс и основной метод:public class Main { public static void main(String[] args) { // ... } }Mainдобрыйи ЧтосерединаизmainметоддаJavaпрограммаизточка входа。
  3. Создайте экземпляр AnnotationConfigApplicationContext.:AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();Здесь созданAnnotationConfigApplicationContextПример,Он будет использоваться для управления bean-компонентами Spring.
  4. Сканировать путь к пакету:context.scan("com.example");scanметод РассказыватьSpringКонтейнер для сканирования указанногоизпуть к пакету(вотcom.example),Найти с помощьюSpringаннотацияиздобрый(нравиться@Repository@Serviceждать),и зарегистрировать их как Beans.
  5. Инициализировать контейнер Spring:context.refresh();refreshметод Инициализировать контейнер Spring,это вызоветBeanизсоздавать、внедрение зависимостей、осуществлять@PostConstructаннотацияизметодждать。
  6. Получить компонент UserService:UserService userService = context.getBean(UserService.class);проходитьgetBeanметод,отSpringПолучить из контейнераUserServiceдобрыйформаизBean。Здесь предполагаетсяUserServiceдобрый已经被отметкадля一个SpringуправлятьизBean(примернравитьсяиспользовать@Serviceаннотация)。
  7. Вызов бизнес-метода:User user = userService.getUser(1L); System.out.println("User: " + user.getName());вызовUserServiceизgetUserметод,и передать пользователяID(вот1L)。Затем打印获取到из Информация о пользователе。

тестовый пример

Сам этот код можно использовать как простой тестовый пример, используемый для проверки того, может ли контейнер Spring правильно создавать bean-компоненты, внедрять зависимости и выполнять бизнес-логику。нравитьсяфруктыUserдобрыйесть одинgetNameметодвернуть пользователяизимя,Вы можете увидеть этот вывод в консоли,чтобы убедиться, что программа работает должным образом.

На что следует обратить внимание

  • убеждатьсяcom.exampleесть в пакетеUserServiceиUserRepositoryдобрый,И они правильно отмечены как Spring beans.
  • UserRepositoryизfindUserByIdметоддолжен содержать актуальныеиз Логика запроса к базе данных。
  • тестовый примерсерединаизUser.getName()методгипотезаUserдобрыйесть одинgetNameметодвернуть пользователяизимя。убеждатьсяUserдобрыйсоответствующийизвыполнить。

Расширять

В реальной разработке вам также может потребоваться добавить логику обработки исключений для решения любых проблем, которые могут возникнуть во время запуска контейнера Spring или создания компонента. Кроме того, для более сложных приложений может потребоваться настройка большего количества компонентов Spring, таких как источники данных, менеджеры транзакций и т. д.

Таким образом, разработчики могут четко организовать код и улучшить его сопровождаемость и тестируемость.

краткое содержание

Благодаря введению этой статьи,мы можем видеть@RepositoryаннотациясуществоватьSpringрамкасерединаизважность。это Не только упрощает уровень доступа к даннымиз Обработка исключений,Также легко интегрируется с управлением транзакциями Spring.,Упрощение и повышение эффективности разработки уровня доступа к данным.

Подвести итог

в общем,@RepositoryАннотацияSpringрамкасередина Для компонентов уровня доступа к даннымиз Мощный инструмент。проходить Эта статьяиз Подробное введениеи实际案пример,Мы должны быть в состоянии лучше понять его использование и основные механизмы. Хотя вы можете столкнуться с некоторыми проблемами во время использования.,但Что带来из Удобствои清晰性да显而易见из。希望Эта статья能够帮助Разработчик更加高效地использовать@Repositoryаннотация,Повысьте эффективность разработки и качество уровня доступа к данным.

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.