class Demo {
private final static String CLASS= "*.class" ;
private final static String PACKAGE= "com.demo." ;
public void initData ( ) {
ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver ( ) ;
String pattern = ResourcePatternResolver. CLASSPATH_ALL_URL_PREFIX +
ClassUtils. convertClassNameToResourcePath ( PACKAGE) + CLASS;
try {
Resource[ ] resources = resourcePatternResolver. getResources ( pattern) ;
MetadataReaderFactory readerFactory = new CachingMetadataReaderFactory ( resourcePatternResolver) ;
for ( Resource resource : resources) {
MetadataReader reader = readerFactory. getMetadataReader ( resource) ;
String classname = reader. getClassMetadata ( ) . getClassName ( ) ;
Class< ? > clazz = Class. forName ( classname) ;
DataSubjectAnnotation dataSubjectAnnotation = clazz. getAnnotation ( DataSubjectAnnotation. class ) ;
if ( dataSubjectAnnotation != null) {
DataSubjectAnnotation annotation = clazz. getAnnotation ( DataSubjectAnnotation. class ) ;
subjectHashMap. put ( annotation. type ( ) , clazz) ;
}
}
} catch ( Exception e) {
e. printStackTrace ( ) ;
}
}
}
public class Demo implements ApplicationListener < ApplicationContextEvent> {
public HashMap< String, Class> subjectHashMap = new HashMap < > ( ) ;
@Override
public void onApplicationEvent ( ApplicationContextEvent event) {
ApplicationContext applicationContext = event. getApplicationContext ( ) ;
Map< String, Object> beansWithAnnotation = applicationContext. getBeansWithAnnotation ( DataSubjectAnnotation. class ) ;
if ( beansWithAnnotation != null) {
beansWithAnnotation. forEach ( ( key, value) - > {
String type= value. getClass ( ) . getAnnotation ( DataSubjectAnnotation. class ) . type ( ) ;
subjectHashMap. put ( type, value. getClass ( ) ) ;
} ) ;
}
}
}