我有几个EJB(用@Stateless注释)在我调用它们时加载(即它们不是 在我的应用程序服务器启动时急切加载。)
其中一些包含自定义方法注释,我们称之为@Foo。
我想在我的应用服务器(AS)中找到一种扫描所有这些方法的方法 启动并找到哪些注释用@Foo。
到目前为止,我已经在web.xml中注册了一个被调用的生命周期监听器 在AS启动。
答案 0 :(得分:0)
如果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。