應用例項_資料庫+反射結合應用例項
阿新 • • 發佈:2021-01-22
技術標籤:應用例項
場景
不同型別的單據通過審批操作變為不同的狀態,不同狀態的單據同意/駁回呼叫的方法不同。在資料庫內配置不同單據在不同狀態呼叫不同名稱的方法,結合反射達到靈活配置的目的。
資料庫設計
應用
- spring容器獲取相應service
@Component("springContextUtil") public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; public void setApplicationContext(ApplicationContext applicationContext) { SpringContextUtil.applicationContext = applicationContext; } /** * 獲取應用上下文 */ public static ApplicationContext getApplicationContext() { return applicationContext; } /** * 根據bean名稱獲取例項-------類名首字母小寫 */ public static <T> T getBean(String name) { return (T) applicationContext.getBean(name); } /** * 根據class獲取例項 * * @param clazz * @param <T> * @return */ public static <T> T getBean(Class<T> clazz) { return (T) applicationContext.getBean(clazz); } /** * 根據class獲取例項map * * @param clazz * @param <T> * @return */ public static <T> Map<String, T> getBeansOfType(Class<T> clazz) { return applicationContext.getBeansOfType(clazz); } }
- 反射呼叫
private Map<String, Object> invokMethod(Object serviceClass, String methodName, String serviceName, Map<String, Object> paramsMap, String tipMsg) { Class clazz = serviceClass.getClass(); try { Method method = clazz.getMethod(methodName, HashMap.class); logger.info("呼叫配置的處理類"+serviceName+"的方法"+methodName); if(method != null) { //進入相應的方法 return (Map<String, Object>) method.invoke(serviceClass, paramsMap); } else { throw new Exception("配置的處理類"+serviceName+"的方法"+methodName+"找不到!"); } }