【发布时间】:2021-12-27 12:47:09
【问题描述】:
此方法首先由 beanDefintirions 检查原始 Bean(Configureablelistablebeanfactory beanFactory 被使用;)。
ConfigurableListableBeanFactory beanFactory;注入。
然后对从BeanFactory获取的原始bean的所有方法进行迭代。在搜索了某个注解的方法后,我们从Applicationcontext中得到了Bean。
这个 Bean 是原始 Bean 之上的一个代理包装器,它是在 -> postProcessBeforeInitialization() 中形成的强>阶段。现在通过这个bean,我调用了一个标有我需要的注解的方法,但它需要另一个参数Obj ..args。
如何获得缺少的参数?
Использую Srping 5.x,java 11
private void runMethodWithPostProxyThirdPhaseAnnotation(String beanName, ApplicationContext applicationContext) {
BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
try {
String originalBeanClassName = beanDefinition.getBeanClassName();
if (originalBeanClassName != null) {
Class<?> originalClass = Class.forName(originalBeanClassName);
Method[] methods = originalClass.getMethods();
for (Method method : methods) {
if (method.isAnnotationPresent(PostProxyThirdPhase.class)) {
String originalMethodName = method.getName();
Class<?>[] parameterTypesFromOriginalMethod = method.getParameterTypes();
Object beanAfterProxy = applicationContext.getBean(beanName);
Method methodFromProxyBean = beanAfterProxy
.getClass()
.getMethod(originalMethodName, parameterTypesFromOriginalMethod);
methodFromProxyBean.invoke(beanAfterProxy, ?);
}
}
}
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
【问题讨论】:
标签: spring reflection java-11