Рубрики
Без рубрики

Сканирование пользовательских аннотаций с помощью Spring Boot

На языке программирования Java аннотация предлагает отличный способ предоставления метаинформации о наших… Помеченный как java, аннотация, spring, учебное пособие.

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

Информация, содержащаяся в аннотации, становится доступной для среды выполнения кода 2 способами.

  1. Используя обработчик аннотаций . Процессоры аннотаций вызываются компилятором java для обработки информации, содержащейся в Аннотированных элементах, для создания новых исходных файлов Java или других метаданных
  2. Сканируя аннотации во время запуска JVM и используя Java reflection, можно идентифицировать AnnotatedElement s, и мы можем соответствующим образом создавать метамодели.

В этой статье рассматривается 2-й способ сканирования аннотированных классов из classpath или методов или переменных во время выполнения и использования его для нашей функции.

Существуют библиотеки, такие как class graph , которые можно использовать в приложениях java, которые не используют spring framework . Если ваше приложение не использует spring framework или spring boot, вы можете обратиться к документации class graph library и продолжить.

Если ваше приложение использует spring framework, то вы можете использовать приведенный ниже фрагмент кода и получить список классов, которые были аннотированы определенной аннотацией

Если ваша пользовательская аннотация @MyCustomAnnotation , вы можете найти все классы, которые помечены аннотацией/| @MyCustomAnnotation используя приведенный ниже вызов функции

Findannotatedклассы(MyCustomAnnotation.class , “com.abc.def.xyz”)

Список пакетов задается как varargs, поскольку это позволило бы использовать аккуратный код в вызывающих местах.

Ниже приведена реализация метода findAnnotatedClasses() . Класс ClassPathScanningCandidateComponentProvider spring framework выполняет волшебное сканирование всего пути к классу и возвращает нам классы компонентов, которые имеют аннотацию @mycustomannotation.

Для spring framework для сканирования вашего класса с вашей пользовательской аннотацией @MyCustomAnnotation,

ваш класс должен быть снабжен аннотациями @Component или другими аннотациями spring, которые делают ваш класс управляемым компонентом Spring.

public Set findAnnotatedClasses(Class annotationType, String... packagesToBeScanned)
{
    ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
    provider.addIncludeFilter(new 
    AnnotationTypeFilter(annotationType));

    Set ret = new HashSet<>();

    for (String pkg : packagesToBeScanned)
    {
         Set beanDefs = provider.findCandidateComponents(pkg);
         beanDefs.stream()
             .map(BeanDefinition::getBeanClassName)
             .forEach(ret::add);
    }

    return ret;
}

Основной класс приложения Spring ниже показывает, как вызвать этот метод.

@SpringBootApplication
public class SpringApp implements CommandLineRunner
{
    @Autowired
    private ClassScanner classScanner;

    public static void main(String[] args)
    {
        SpringApplication.run(SpringApp.class, args);
    }

    @Override
    public void run(String... args) throws Exception
    {
        Set annotatedClasses = classScanner.findAnnotatedClasses(MyCustomAnnotation.class, "xyz.reachadi");

        for (String c : annotatedClasses)
            System.out.println("Annotated Class : " + c);
    }
}

Подход очень прост….. верно?

Итак, что дальше? Улучшите читаемость ваших кодов, определив пользовательские аннотации и используя их в ваших кодах.

Полный рабочий пример этого блога доступен в моем репозитории github.

Пожалуйста, обратитесь к readme.md для получения инструкций по запуску руководства.

Оригинал: “https://dev.to/adithyank/custom-annotation-scanning-with-spring-boot-4g”