如果 EJB 是由 Spring 构建的,那么您可以使用 Spring bean 后处理器(这是 Spring 在执行扫描时使用的)。
@Component
public class FooFinder implements BeanPostProcessor {
List<Method> fooMethods = new ArrayList<>();
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
Class<?> targetClass = AopUtils.getTargetClass(bean);
for (Method method : targetClass.getDeclaredMethods()){
for (Annotation annotation : AnnotationUtils.getAnnotations(method)){
if (annotation instanceof Foo){
fooMethods.add(method);
}
}
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
还要注意...小心将依赖项注入到您的 BeanPostProcessor 中。您可能会在 Spring 依赖关系图中产生问题,因为必须首先创建 BeanPostProcessors。如果您需要向其他 bean 注册该方法,请创建 BeanPostProcessor ApplicationContextAware 或 BeanFactoryAware,然后以这种方式获取 bean。