import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.stereotype.Component;
@Component
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface JobConfig{
String[] name();
}
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;
import java.util.Iterator;
import java.util.Map;
@Component
@Configuration
public class ScanTest implements ApplicationContextAware{
private Environment environment;
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
this.environment = ctx.getEnvironment();
Map<String, Object> beanMap = ctx.getBeansWithAnnotation(JobConfig.class);
Iterator iterator = beanMap.values().iterator();
while (iterator.hasNext()) {
Object confBean = iterator.next();
Class<?> clz = confBean.getClass();
JobConfig conf = this.findJobConfigAnnot(clz);
String jobClass = clz.getName();
if (jobClass.contains("$$EnhancerBySpringCGLIB")) {
jobClass = jobClass.substring(0, jobClass.indexOf("$$EnhancerBySpringCGLIB"));
}
String[] jobNames = conf.name();
if (jobNames == null) {
throw new IllegalArgumentException("ElasticJobConf job name error. jobClass:" + jobClass);
}
System.out.println("扫描到:"+conf.name());
}
}
public JobConfig findJobConfigAnnot(Class<?> clz) {
JobConfig JobConfig = clz.getAnnotation(JobConfig.class);
if (JobConfig == null && clz.getSimpleName().contains("SpringCGLIB")) {
Class tmpClass = clz.getSuperclass();
for (int i = 0; i < 3; tmpClass = tmpClass.getSuperclass()) {
JobConfig = (JobConfig) tmpClass.getAnnotation(JobConfig.class);
if (JobConfig != null) {
return JobConfig;
}
++i;
}
}
return JobConfig;
}
}