Прежде всего, я не думаю, что com.validation.ValidateCharacteristicsProcessor
существует в вашем проекте. Тем не менее, если вы пытаетесь загрузить этот класс (если он есть), проверьте, аннотирован ли этот класс @Fix
или нет.
Я показываю с предоставленным вами TestClass.
Я попробовал простой подход.
Сначала я создал простой проект maven для моего удобства.
Структура проекта:
Fix. java
package com.example;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@Retention(RUNTIME)
@Target(TYPE)
public @interface Fix {
public String[] author() default "";
}
TestClass. java
package com.example;
@Fix(author = "John Doe")
public class TestClass {
public void test() {
}
}
Main. java
package com.example;
public class Main {
public static void main(String[] args) throws ClassNotFoundException {
// create an instance of TestClass
TestClass t = new TestClass();
// use reflection to extract annotation from TestClass.class
Fix fix = t.getClass().getAnnotation(Fix.class); // or TestClass.class.getAnnotation(Fix.class);
// print the value
System.out.println(fix.author()[0]);
}
}
Вывод:
Примечание: Если вы хотите прочитать все классы из пакета.
Этот вопрос имеет четко определенный ответ - Можете ли вы найти все классы в пакете, используя отражение?
Я узнал отражение из этой статьи. -> http://tutorials.jenkov.com/java-reflection/index.html
Это очень хороший блог.
Если вы хотите продолжить с кодом, который вы предоставили, то у меня есть исправление приведено ниже.
Я исследовал ResourcePatternResolver
и думаю, что вы используете spring-core
для чтения классов.
Итак, я обновил ваш код.
package com.example;
import java.io.IOException;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
public class Main {
public static void main(String[] args) throws ClassNotFoundException {
ResourcePatternResolver resolversec = new PathMatchingResourcePatternResolver();
Class<?> cl = resolversec.getClassLoader().loadClass("com.example.TestClass");
if (cl != null) {
System.out.println("Class is not null " + cl.getSimpleName());
}
Fix fix = cl.getAnnotation(Fix.class);
if (fix != null) {
System.out.println("!!!! " + fix.author()[0]);
}
}
}
Вывод:
Обновлено pom.xml
:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>read-annotations</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>