1. ApplicationContextHolder 实现类
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Service;
@Service("applicationContextProvider")
public class ApplicationContextHolder implements ApplicationContextAware {
private static ApplicationContext appContext;
/**
*
* @param ctx
* @throws BeansException
*/
@Override
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
ApplicationContextHolder.appContext = ctx;
}
/**
*
* @return
*/
public static ApplicationContext getApplicationContext() {
return appContext;
}
}
2. Service 代码片段
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;
Service("arServiceImpl")
public class ArServiceImpl {
@Autowired
private ArdMapper ardMapper;
public int getMarketProductCompNum(String keyId){
return ardMapper.getMarketProductCompNum(keyId);
}
}
3. Spring 通过Java反射动态获取方法 代码片段
ApplicationContext applicationContext = ApplicationContextHolder.getApplicationContext();
Class<?> aClass = applicationContext.getBean("arServiceImpl").getClass();
Method method = aClass.getDeclaredMethod("getMarketProductCompNum", String.class);
int num = (Integer) method.invoke(applicationContext.getBean("arServiceImpl"),params.getId());
这篇博客展示了如何在Spring框架中使用ApplicationContextHolder获取应用上下文,并通过反射动态调用Service层的方法。示例中,首先定义了一个ApplicationContextHolder实现ApplicationContextAware接口,静态持有ApplicationContext实例。接着在ArServiceImpl中,注入了ArdMapper并调用了getMarketProductCompNum方法。最后,通过反射动态获取并执行了ArServiceImpl的getMarketProductCompNum方法,传递参数完成调用。
1477

被折叠的 条评论
为什么被折叠?



